diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp index d12112a9411..2a39634ad9a 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp @@ -107,6 +107,7 @@ public: Utils::MacroExpanderProvider m_expanderProvider; QPixmap m_labelPixmap; Utils::FilePath m_baseFileName; + BaseStringAspect::ValueAcceptor m_valueAcceptor; bool m_readOnly = false; bool m_showToolTipOnLabel = false; bool m_fileDialogOnly = false; @@ -147,6 +148,11 @@ BaseStringAspect::BaseStringAspect() BaseStringAspect::~BaseStringAspect() = default; +void BaseStringAspect::setValueAcceptor(BaseStringAspect::ValueAcceptor &&acceptor) +{ + d->m_valueAcceptor = std::move(acceptor); +} + QString BaseStringAspect::value() const { return d->m_value; @@ -155,10 +161,22 @@ QString BaseStringAspect::value() const void BaseStringAspect::setValue(const QString &value) { const bool isSame = value == d->m_value; - d->m_value = value; + if (isSame) + return; + + QString processedValue = value; + if (d->m_valueAcceptor) { + const Utils::optional tmp = d->m_valueAcceptor(d->m_value, value); + if (!tmp) { + update(); // Make sure the original value is retained in the UI + return; + } + processedValue = tmp.value(); + } + + d->m_value = processedValue; update(); - if (!isSame) - emit changed(); + emit changed(); } void BaseStringAspect::fromMap(const QVariantMap &map) diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.h b/src/plugins/projectexplorer/projectconfigurationaspects.h index 71567d493f1..f57b69869ab 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.h +++ b/src/plugins/projectexplorer/projectconfigurationaspects.h @@ -115,6 +115,9 @@ public: void addToLayout(LayoutBuilder &builder) override; + // Hook between UI and BaseStringAspect: + using ValueAcceptor = std::function(const QString &, const QString &)>; + void setValueAcceptor(ValueAcceptor &&acceptor); QString value() const; void setValue(const QString &val);