| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #include "cmWIXShortcut.h" |
| |
| #include "cmWIXFilesSourceWriter.h" |
| |
| void cmWIXShortcuts::insert(Type type, std::string const& id, |
| cmWIXShortcut const& shortcut) |
| { |
| this->Shortcuts[type][id].push_back(shortcut); |
| } |
| |
| bool cmWIXShortcuts::empty(Type type) const |
| { |
| return this->Shortcuts.find(type) == this->Shortcuts.end(); |
| } |
| |
| bool cmWIXShortcuts::EmitShortcuts( |
| Type type, std::string const& registryKey, |
| std::string const& cpackComponentName, |
| cmWIXFilesSourceWriter& fileDefinitions) const |
| { |
| shortcut_type_map_t::const_iterator i = this->Shortcuts.find(type); |
| |
| if (i == this->Shortcuts.end()) { |
| return false; |
| } |
| |
| shortcut_id_map_t const& id_map = i->second; |
| |
| std::string shortcutPrefix; |
| std::string registrySuffix; |
| |
| switch (type) { |
| case START_MENU: |
| shortcutPrefix = "CM_S"; |
| break; |
| case DESKTOP: |
| shortcutPrefix = "CM_DS"; |
| registrySuffix = "_desktop"; |
| break; |
| case STARTUP: |
| shortcutPrefix = "CM_SS"; |
| registrySuffix = "_startup"; |
| break; |
| default: |
| return false; |
| } |
| |
| for (auto const& j : id_map) { |
| std::string const& id = j.first; |
| shortcut_list_t const& shortcutList = j.second; |
| |
| for (size_t shortcutListIndex = 0; shortcutListIndex < shortcutList.size(); |
| ++shortcutListIndex) { |
| cmWIXShortcut const& shortcut = shortcutList[shortcutListIndex]; |
| fileDefinitions.EmitShortcut(id, shortcut, shortcutPrefix, |
| shortcutListIndex); |
| } |
| } |
| |
| fileDefinitions.EmitInstallRegistryValue(registryKey, cpackComponentName, |
| registrySuffix); |
| |
| return true; |
| } |
| |
| void cmWIXShortcuts::AddShortcutTypes(std::set<Type>& types) |
| { |
| for (auto const& shortcut : this->Shortcuts) { |
| types.insert(shortcut.first); |
| } |
| } |
| |
| void cmWIXShortcuts::CreateFromProperties(std::string const& id, |
| std::string const& directoryId, |
| cmInstalledFile const& installedFile) |
| { |
| CreateFromProperty("CPACK_START_MENU_SHORTCUTS", START_MENU, id, directoryId, |
| installedFile); |
| |
| CreateFromProperty("CPACK_DESKTOP_SHORTCUTS", DESKTOP, id, directoryId, |
| installedFile); |
| |
| CreateFromProperty("CPACK_STARTUP_SHORTCUTS", STARTUP, id, directoryId, |
| installedFile); |
| } |
| |
| void cmWIXShortcuts::CreateFromProperty(std::string const& propertyName, |
| Type type, std::string const& id, |
| std::string const& directoryId, |
| cmInstalledFile const& installedFile) |
| { |
| std::vector<std::string> list; |
| installedFile.GetPropertyAsList(propertyName, list); |
| |
| for (std::string const& label : list) { |
| cmWIXShortcut shortcut; |
| shortcut.label = label; |
| shortcut.workingDirectoryId = directoryId; |
| insert(type, id, shortcut); |
| } |
| } |