/**************************************************************************** ** ** Copyright (C) 2015 Canonical Ltd. ** Contact: http://www.qt.io/licensing ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms and ** conditions see http://www.qt.io/terms-conditions. For further information ** use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ #include "cmakekitinformation.h" #include "cmakekitconfigwidget.h" #include "cmaketoolmanager.h" #include "cmaketool.h" #include #include #include #include #include using namespace ProjectExplorer; namespace CMakeProjectManager { CMakeKitInformation::CMakeKitInformation() { setObjectName(QLatin1String("CMakeKitInformation")); setId(CMakeKitInformation::id()); setPriority(20000); //make sure the default value is set if a selected CMake is removed connect(CMakeToolManager::instance(), &CMakeToolManager::cmakeRemoved, [this]() { foreach (Kit *k, KitManager::kits()) fix(k); }); //make sure the default value is set if a new default CMake is set connect(CMakeToolManager::instance(), &CMakeToolManager::defaultCMakeChanged, [this]() { foreach (Kit *k, KitManager::kits()) fix(k); }); } Core::Id CMakeKitInformation::id() { return "CMakeProjectManager.CMakeKitInformation"; } CMakeTool *CMakeKitInformation::cmakeTool(const Kit *k) { if (!k) return 0; const QVariant id = k->value(CMakeKitInformation::id()); return CMakeToolManager::findById(Core::Id::fromSetting(id)); } void CMakeKitInformation::setCMakeTool(Kit *k, const Core::Id id) { QTC_ASSERT(k, return); if (id.isValid()) { // Only set cmake tools that are known to the manager QTC_ASSERT(CMakeToolManager::findById(id), return); k->setValue(CMakeKitInformation::id(), id.toSetting()); } else { //setting a empty Core::Id will reset to the default value k->setValue(CMakeKitInformation::id(),defaultValue().toSetting()); } } Core::Id CMakeKitInformation::defaultValue() { CMakeTool *defaultTool = CMakeToolManager::defaultCMakeTool(); if (defaultTool) return defaultTool->id(); return Core::Id(); } QVariant CMakeKitInformation::defaultValue(Kit *) const { return defaultValue().toSetting(); } QList CMakeKitInformation::validate(const Kit *k) const { Q_UNUSED(k); return QList(); } void CMakeKitInformation::setup(Kit *k) { CMakeTool *tool = CMakeKitInformation::cmakeTool(k); if (tool) return; setCMakeTool(k, defaultValue()); } void CMakeKitInformation::fix(Kit *k) { CMakeTool *tool = CMakeKitInformation::cmakeTool(k); if (!tool) setup(k); } KitInformation::ItemList CMakeKitInformation::toUserOutput(const Kit *k) const { CMakeTool *tool = cmakeTool(k); return ItemList() << qMakePair(tr("CMake"), tool == 0 ? tr("Unconfigured") : tool->displayName()); } KitConfigWidget *CMakeKitInformation::createConfigWidget(Kit *k) const { return new Internal::CMakeKitConfigWidget(k, this); } } // namespace CMakeProjectManager