From f96604e685c924dc59ad7b81b82b7d9f3f8c7641 Mon Sep 17 00:00:00 2001 From: Andrii Semkiv Date: Fri, 13 Sep 2024 13:12:43 +0200 Subject: [PATCH] Add variable expansion in tooltip Enabled expansion of variables in CMake configuration tooltip. Note, I honestly tried to create a unit-test for this, but it all ended up futile: even ignoring the fact that `ConfigModelTreeItem` uses private `InternalDataItem` type, CMakeProjectManager does not expose some of the symbols required for the unit test to be implemented. At this point I do not think it is worth it to try any further. Change-Id: I78cd52c2470225e00477ada424cb43d7da75a14c Reviewed-by: hjk --- src/plugins/cmakeprojectmanager/configmodel.cpp | 15 +++++++++++---- src/plugins/cmakeprojectmanager/configmodel.h | 8 +++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/configmodel.cpp b/src/plugins/cmakeprojectmanager/configmodel.cpp index 287615650ca..a274c5a89ea 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.cpp +++ b/src/plugins/cmakeprojectmanager/configmodel.cpp @@ -508,10 +508,11 @@ void ConfigModel::generateTree() auto root = new Utils::TreeItem; for (InternalDataItem &di : m_configuration) { auto it = initialHash.find(di.key); + Utils::MacroExpander *expander = macroExpander(); if (it != initialHash.end()) - di.initialValue = it->expandedValue(macroExpander()); + di.initialValue = it->expandedValue(expander); - root->appendChild(new Internal::ConfigModelTreeItem(&di)); + root->appendChild(new Internal::ConfigModelTreeItem(&di, expander)); } setRootItem(root); } @@ -673,11 +674,17 @@ QString ConfigModelTreeItem::toolTip() const tooltip << dataItem->description; const QString pattern = "
%1
%2
"; + const QString value = dataItem->currentValue(); if (dataItem->isInitial) { if (!dataItem->kitValue.isEmpty()) tooltip << pattern.arg(Tr::tr("Kit:")).arg(dataItem->kitValue); - tooltip << pattern.arg(Tr::tr("Initial Configuration:")).arg(dataItem->currentValue()); + tooltip << pattern.arg(Tr::tr("Initial Configuration:")).arg(value); + + const QString expandedValue = dataItem->expandedValue(m_macroExpander); + const bool showExpanded = expandedValue != value; + if (showExpanded) + tooltip << pattern.arg(Tr::tr("Expands to:")).arg(expandedValue); } else { if (!dataItem->initialValue.isEmpty()) { tooltip << pattern.arg(Tr::tr("Initial Configuration:")) @@ -685,7 +692,7 @@ QString ConfigModelTreeItem::toolTip() const } if (dataItem->inCMakeCache) { - tooltip << pattern.arg(Tr::tr("Current Configuration:")).arg(dataItem->currentValue()); + tooltip << pattern.arg(Tr::tr("Current Configuration:")).arg(value); } else { tooltip << pattern.arg(Tr::tr("Not in CMakeCache.txt")).arg(QString()); } diff --git a/src/plugins/cmakeprojectmanager/configmodel.h b/src/plugins/cmakeprojectmanager/configmodel.h index e70cac3bbec..0e3de71cb77 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.h +++ b/src/plugins/cmakeprojectmanager/configmodel.h @@ -123,7 +123,10 @@ private: class ConfigModelTreeItem : public Utils::TreeItem { public: - ConfigModelTreeItem(ConfigModel::InternalDataItem *di = nullptr) : dataItem(di) {} + ConfigModelTreeItem(ConfigModel::InternalDataItem *di, Utils::MacroExpander *macroExpander) + : dataItem(di) + , m_macroExpander(macroExpander) + {} ~ConfigModelTreeItem() override; QVariant data(int column, int role) const final; @@ -134,6 +137,9 @@ public: QString currentValue() const; ConfigModel::InternalDataItem *dataItem; + +private: + Utils::MacroExpander *m_macroExpander = nullptr; }; } // CMakeProjectManager::Internal