From dbd365afe6f80d76f714f107dad31704f897b9e2 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 23 Nov 2017 16:48:05 +0100 Subject: [PATCH] Kit: Allow for Macros in EnvironmentKitInformation Task-number: QTCREATORBUG-19359 Change-Id: I215fcbb6156f864176d7a8284371029e3ae62e92 Reviewed-by: Eike Ziller --- src/libs/utils/environmentdialog.cpp | 4 +++- src/libs/utils/environmentdialog.h | 4 +++- src/plugins/projectexplorer/kitinformation.cpp | 8 ++++++-- .../projectexplorer/kitinformationconfigwidget.cpp | 14 +++++++++++--- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/libs/utils/environmentdialog.cpp b/src/libs/utils/environmentdialog.cpp index bd84c6ed850..775950f7502 100644 --- a/src/libs/utils/environmentdialog.cpp +++ b/src/libs/utils/environmentdialog.cpp @@ -153,9 +153,11 @@ void EnvironmentDialog::setPlaceholderText(const QString &text) QList EnvironmentDialog::getEnvironmentItems(bool *ok, QWidget *parent, const QList &initial, - const QString &placeholderText) + const QString &placeholderText, + Polisher polisher) { EnvironmentDialog dlg(parent); + polisher(&dlg); dlg.setEnvironmentItems(initial); dlg.setPlaceholderText(placeholderText); bool result = dlg.exec() == QDialog::Accepted; diff --git a/src/libs/utils/environmentdialog.h b/src/libs/utils/environmentdialog.h index 4780b250ff3..be8218508bb 100644 --- a/src/libs/utils/environmentdialog.h +++ b/src/libs/utils/environmentdialog.h @@ -46,10 +46,12 @@ public: void setPlaceholderText(const QString &text); + using Polisher = std::function; static QList getEnvironmentItems(bool *ok, QWidget *parent = nullptr, const QList &initial = QList(), - const QString &placeholderText = QString()); + const QString &placeholderText = QString(), + Polisher polish = Polisher()); private: Internal::EnvironmentDialogPrivate *d; diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index 71d3dba0ea7..6a46f957f9f 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -823,8 +823,12 @@ void EnvironmentKitInformation::fix(Kit *k) void EnvironmentKitInformation::addToEnvironment(const Kit *k, Utils::Environment &env) const { const QVariant envValue = k->value(EnvironmentKitInformation::id()); - if (envValue.isValid()) - env.modify(Utils::EnvironmentItem::fromStringList(envValue.toStringList())); + if (envValue.isValid()) { + const QStringList values = Utils::transform(envValue.toStringList(), [k](const QString &v) { + return k->macroExpander()->expand(v); + }); + env.modify(Utils::EnvironmentItem::fromStringList(values)); + } } KitConfigWidget *EnvironmentKitInformation::createConfigWidget(Kit *k) const diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp index 9e398a280f5..d4eae3df133 100644 --- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp @@ -36,6 +36,7 @@ #include "environmentwidget.h" #include +#include #include #include #include @@ -461,9 +462,16 @@ QList KitEnvironmentConfigWidget::currentEnvironment() c void KitEnvironmentConfigWidget::editEnvironmentChanges() { bool ok; - const QList changes = Utils::EnvironmentDialog::getEnvironmentItems(&ok, - m_summaryLabel, - currentEnvironment()); + Utils::MacroExpander *expander = m_kit->macroExpander(); + Utils::EnvironmentDialog::Polisher polisher = [expander](QWidget *w) { + Core::VariableChooser::addSupportForChildWidgets(w, expander); + }; + const QList + changes = Utils::EnvironmentDialog::getEnvironmentItems(&ok, + m_summaryLabel, + currentEnvironment(), + QString(), + polisher); if (!ok) return;