diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 6facbb8cab7..d7ecacc0668 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -353,6 +353,8 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) m_showProgressTimer.start(); }); + m_configModel->setMacroExpander(m_buildConfiguration->macroExpander()); + if (bc->buildSystem()->isParsing()) m_showProgressTimer.start(); else { @@ -368,6 +370,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) m_configModel->setInitialParametersConfiguration( m_buildConfiguration->initialCMakeConfiguration()); m_buildConfiguration->filterConfigArgumentsFromAdditionalCMakeArguments(); + updateFromKit(); m_configView->expandAll(); m_configView->setEnabled(true); stretcher->stretch(); diff --git a/src/plugins/cmakeprojectmanager/configmodel.cpp b/src/plugins/cmakeprojectmanager/configmodel.cpp index 83e326e530d..aa74f3986b6 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.cpp +++ b/src/plugins/cmakeprojectmanager/configmodel.cpp @@ -26,6 +26,7 @@ #include "configmodel.h" #include +#include #include #include @@ -315,34 +316,37 @@ void ConfigModel::setConfiguration(const QList &c generateTree(); } +Utils::MacroExpander *ConfigModel::macroExpander() const +{ + return m_macroExpander; +} + +void ConfigModel::setMacroExpander(Utils::MacroExpander *newExpander) +{ + m_macroExpander = newExpander; +} + void ConfigModel::generateTree() { + QHash initialHash; + for (const InternalDataItem &di : m_configuration) + if (di.isInitial) + initialHash.insert(di.key, di); + auto root = new Utils::TreeItem; - for (InternalDataItem &di : m_configuration) + for (InternalDataItem &di : m_configuration) { + auto it = initialHash.find(di.key); + if (it != initialHash.end()) + di.initialValue = macroExpander()->expand(it->value); + root->appendChild(new Internal::ConfigModelTreeItem(&di)); + } setRootItem(root); } ConfigModel::InternalDataItem::InternalDataItem(const ConfigModel::DataItem &item) : DataItem(item) { } -QString ConfigModel::InternalDataItem::toolTip() const -{ - QString desc = description; - if (isAdvanced) - desc += QCoreApplication::translate("CMakeProjectManager::ConfigModel", " (ADVANCED)"); - QStringList tooltip(desc); - if (inCMakeCache) { - if (value != newValue) - tooltip << QCoreApplication::translate("CMakeProjectManager", "Current CMake: %1").arg(value); - } else { - tooltip << QCoreApplication::translate("CMakeProjectManager", "Not in CMakeCache.txt").arg(value); - } - if (!kitValue.isEmpty()) - tooltip << QCoreApplication::translate("CMakeProjectManager::ConfigModel", "Current kit: %1").arg(kitValue); - return tooltip.join("
"); -} - QString ConfigModel::InternalDataItem::currentValue() const { if (isUnset) @@ -414,9 +418,15 @@ QVariant ConfigModelTreeItem::data(int column, int role) const font.setStrikeOut((!dataItem->inCMakeCache && !dataItem->isUserNew) || dataItem->isUnset); return font; } - case Qt::ForegroundRole: - return Utils::creatorTheme()->color((!dataItem->kitValue.isNull() && dataItem->kitValue != value) - ? Utils::Theme::TextColorHighlight : Utils::Theme::TextColorNormal); + case Qt::ForegroundRole: { + bool mismatch = false; + if (dataItem->isInitial) + mismatch = !dataItem->kitValue.isEmpty() && dataItem->kitValue != value; + else + mismatch = !dataItem->initialValue.isEmpty() && dataItem->initialValue != value; + return Utils::creatorTheme()->color(mismatch ? Utils::Theme::TextColorHighlight + : Utils::Theme::TextColorNormal); + } case Qt::ToolTipRole: { return toolTip(); } @@ -492,16 +502,36 @@ Qt::ItemFlags ConfigModelTreeItem::flags(int column) const QString ConfigModelTreeItem::toolTip() const { QTC_ASSERT(dataItem, return QString()); - QStringList tooltip(dataItem->description); - if (!dataItem->kitValue.isEmpty()) - tooltip << QCoreApplication::translate("CMakeProjectManager", "Value requested by kit: %1").arg(dataItem->kitValue); - if (dataItem->inCMakeCache) { + QStringList tooltip; + if (!dataItem->description.isEmpty()) + tooltip << dataItem->description; + + if (dataItem->isInitial) { + if (!dataItem->kitValue.isEmpty()) + tooltip << QCoreApplication::translate("CMakeProjectManager", "

Kit: %1

") + .arg(dataItem->kitValue); + if (dataItem->value != dataItem->newValue) - tooltip << QCoreApplication::translate("CMakeProjectManager", "Current CMake: %1").arg(dataItem->value); - } else { - tooltip << QCoreApplication::translate("CMakeProjectManager", "Not in CMakeCache.txt"); + tooltip << QCoreApplication::translate("CMakeProjectManager", + "

Initial Configuration: %1

") + .arg(dataItem->value); + } else { + if (!dataItem->initialValue.isEmpty()) + tooltip << QCoreApplication::translate("CMakeProjectManager", + "

Initial Configuration: %1

") + .arg(dataItem->initialValue); + + if (dataItem->inCMakeCache) { + if (dataItem->value != dataItem->newValue) + tooltip << QCoreApplication::translate("CMakeProjectManager", + "

Current Configuration: %1

") + .arg(dataItem->value); + } else { + tooltip << QCoreApplication::translate("CMakeProjectManager", + "

Not in CMakeCache.txt

"); + } } - return tooltip.join("
"); + return tooltip.join(""); } QString ConfigModelTreeItem::currentValue() const diff --git a/src/plugins/cmakeprojectmanager/configmodel.h b/src/plugins/cmakeprojectmanager/configmodel.h index 03192cad6ff..87f37fcaed6 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.h +++ b/src/plugins/cmakeprojectmanager/configmodel.h @@ -162,6 +162,8 @@ public: QList configurationForCMake() const; + Utils::MacroExpander *macroExpander() const; + void setMacroExpander(Utils::MacroExpander *newExpander); private: class InternalDataItem : public DataItem @@ -170,13 +172,13 @@ private: InternalDataItem(const DataItem &item); InternalDataItem(const InternalDataItem &item) = default; - QString toolTip() const; QString currentValue() const; bool isUserChanged = false; bool isUserNew = false; QString newValue; QString kitValue; + QString initialValue; }; void generateTree(); @@ -184,6 +186,7 @@ private: void setConfiguration(const QList &config); QList m_configuration; KitConfiguration m_kitConfiguration; + Utils::MacroExpander *m_macroExpander = nullptr; friend class Internal::ConfigModelTreeItem; };