diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp index 547cd960114..9a54571a9cf 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp @@ -27,11 +27,13 @@ #include "configmodel.h" #include "configmodelitemdelegate.h" +#include "cmakekitinformation.h" #include "cmakeproject.h" #include "cmakebuildconfiguration.h" #include #include +#include #include #include @@ -252,6 +254,10 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) connect(bc, &CMakeBuildConfiguration::errorOccured, this, &CMakeBuildSettingsWidget::setError); connect(bc, &CMakeBuildConfiguration::warningOccured, this, &CMakeBuildSettingsWidget::setWarning); + + updateFromKit(); + connect(m_buildConfiguration->target(), &ProjectExplorer::Target::kitChanged, + this, &CMakeBuildSettingsWidget::updateFromKit); } void CMakeBuildSettingsWidget::setError(const QString &message) @@ -294,5 +300,17 @@ void CMakeBuildSettingsWidget::updateAdvancedCheckBox() m_configFilterModel->setFilterRole(m_showAdvancedCheckBox->isChecked() ? Qt::EditRole : Qt::DisplayRole); } +void CMakeBuildSettingsWidget::updateFromKit() +{ + const ProjectExplorer::Kit *k = m_buildConfiguration->target()->kit(); + const CMakeConfig config = CMakeConfigurationKitInformation::configuration(k); + + QHash configHash; + for (const CMakeConfigItem &i : config) + configHash.insert(QString::fromUtf8(i.key), i.expandedValue(k)); + + m_configModel->setKitConfiguration(configHash); +} + } // namespace Internal } // namespace CMakeProjectManager diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h index 815bc8525a2..06242d5fe16 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h @@ -60,6 +60,7 @@ public: private: void updateButtonState(); void updateAdvancedCheckBox(); + void updateFromKit(); CMakeBuildConfiguration *m_buildConfiguration; QTreeView *m_configView; diff --git a/src/plugins/cmakeprojectmanager/configmodel.cpp b/src/plugins/cmakeprojectmanager/configmodel.cpp index 88206f3d5cc..98d9cf05b7a 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.cpp +++ b/src/plugins/cmakeprojectmanager/configmodel.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -113,7 +114,9 @@ QVariant ConfigModel::data(const QModelIndex &index, int role) const return QVariant(); } case 1: { - const QString value = item.isUserChanged ? item.newValue : item.value; + const QString value = item.currentValue(); + const QString kitValue = m_kitConfiguartion.value(item.key); + switch (role) { case Qt::CheckStateRole: return (item.type == DataItem::BOOLEAN) @@ -128,8 +131,19 @@ QVariant ConfigModel::data(const QModelIndex &index, int role) const font.setItalic(item.isCMakeChanged); return font; } - case Qt::ToolTipRole: - return item.toolTip(); + case Qt::ForegroundRole: + return Utils::creatorTheme()->color((!kitValue.isNull() && kitValue != value) + ? Utils::Theme::TextColorHighlight : Utils::Theme::TextColorNormal); + case Qt::ToolTipRole: { + QString tooltip = item.toolTip(); + const QString kitValue = m_kitConfiguartion.value(item.key); + if (!kitValue.isNull()) { + if (!tooltip.isEmpty()) + tooltip.append("
"); + tooltip.append(tr("Kit value: %1").arg(kitValue)); + } + return tooltip; + } default: return QVariant(); } @@ -273,6 +287,11 @@ void ConfigModel::setConfiguration(const QList &config) endResetModel(); } +void ConfigModel::setKitConfiguration(const QHash &kitConfig) +{ + m_kitConfiguartion = kitConfig; +} + void ConfigModel::flush() { beginResetModel(); @@ -338,10 +357,18 @@ ConfigModel::InternalDataItem::InternalDataItem(const ConfigModel::DataItem &ite QString ConfigModel::InternalDataItem::toolTip() const { QStringList tooltip(description); - if (!value.isEmpty() && !newValue.isEmpty() && value != newValue) - tooltip << QCoreApplication::translate("CMakeProjectManager", "Current CMake: %1").arg(value); + 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); + } return tooltip.join("
"); } -} // namespace CMakeProjectManager +QString ConfigModel::InternalDataItem::currentValue() const +{ + return isUserChanged ? newValue : value; +} +} // namespace CMakeProjectManager diff --git a/src/plugins/cmakeprojectmanager/configmodel.h b/src/plugins/cmakeprojectmanager/configmodel.h index 3730ac380e5..94fef0b6648 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.h +++ b/src/plugins/cmakeprojectmanager/configmodel.h @@ -68,6 +68,7 @@ public: const QString &description = QString(), const QStringList &values = QStringList()); void setConfiguration(const QList &config); + void setKitConfiguration(const QHash &kitConfig); void flush(); void resetAllChanges(); @@ -84,6 +85,7 @@ private: InternalDataItem(const InternalDataItem &item) = default; QString toolTip() const; + QString currentValue() const; bool isUserChanged = false; bool isUserNew = false; @@ -94,6 +96,7 @@ private: InternalDataItem &itemAtRow(int row); const InternalDataItem &itemAtRow(int row) const; QList m_configuration; + QHash m_kitConfiguartion; }; } // namespace CMakeProjectManager