// Copyright (C) 2020 Alexis Jeandet. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "toolssettingsaccessor.h" #include "mesonpluginconstants.h" #include "mesonprojectmanagertr.h" #include #include #include #include #include #include #include namespace MesonProjectManager { namespace Internal { static QString entryName(int index) { return QString("%1%2").arg(Constants::ToolsSettings::ENTRY_KEY).arg(index); } ToolsSettingsAccessor::ToolsSettingsAccessor() { setDocType("QtCreatorMesonTools"); setApplicationDisplayName(Core::Constants::IDE_DISPLAY_NAME); setBaseFilePath(Core::ICore::userResourcePath(Constants::ToolsSettings::FILENAME)); } void ToolsSettingsAccessor::saveMesonTools(const std::vector &tools, QWidget *parent) { using namespace Constants; QVariantMap data; int entry_count = 0; for (const MesonTools::Tool_t &tool : tools) { auto asMeson = std::dynamic_pointer_cast(tool); if (asMeson) data.insert(entryName(entry_count), toVariantMap(*asMeson)); else { auto asNinja = std::dynamic_pointer_cast(tool); if (asNinja) data.insert(entryName(entry_count), toVariantMap(*asNinja)); } entry_count++; } data.insert(ToolsSettings::ENTRY_COUNT, entry_count); saveSettings(data, parent); } std::vector ToolsSettingsAccessor::loadMesonTools(QWidget *parent) { using namespace Constants; auto data = restoreSettings(parent); auto entry_count = data.value(ToolsSettings::ENTRY_COUNT, 0).toInt(); std::vector result; for (auto toolIndex = 0; toolIndex < entry_count; toolIndex++) { auto name = entryName(toolIndex); if (data.contains(name)) { const auto map = data[name].toMap(); auto type = map.value(ToolsSettings::TOOL_TYPE_KEY, ToolsSettings::TOOL_TYPE_MESON); if (type == ToolsSettings::TOOL_TYPE_NINJA) result.emplace_back(fromVariantMap(data[name].toMap())); else result.emplace_back(fromVariantMap(data[name].toMap())); } } return result; } } // namespace Internal } // namespace MesonProjectManager