From 013b71b301ff8c00508fefb0a2dac0757bd206c4 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 15 Aug 2023 14:24:32 +0200 Subject: [PATCH] Utils: Allow cascaded aspect "setEnabler" Change-Id: I4e519c0ef27460b42c4e44a755e5e6cbbf49ebdf Reviewed-by: hjk --- src/libs/utils/aspects.cpp | 24 ++++++++++++++++-------- src/libs/utils/aspects.h | 1 + 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 7092ded9f40..9268d325860 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -299,11 +299,16 @@ bool BaseAspect::isEnabled() const void BaseAspect::setEnabled(bool enabled) { - d->m_enabled = enabled; for (QWidget *w : std::as_const(d->m_subWidgets)) { QTC_ASSERT(w, continue); w->setEnabled(enabled); } + + if (enabled == d->m_enabled) + return; + + d->m_enabled = enabled; + emit enabledChanged(); } /*! @@ -312,13 +317,16 @@ void BaseAspect::setEnabled(bool enabled) void BaseAspect::setEnabler(BoolAspect *checker) { QTC_ASSERT(checker, return); - setEnabled(checker->value()); - connect(checker, &BoolAspect::volatileValueChanged, this, [this, checker] { - BaseAspect::setEnabled(checker->volatileValue()); - }); - connect(checker, &BoolAspect::changed, this, [this, checker] { - BaseAspect::setEnabled(checker->volatileValue()); - }); + + auto update = [this, checker] { + BaseAspect::setEnabled(checker->isEnabled() && checker->volatileValue()); + }; + + connect(checker, &BoolAspect::volatileValueChanged, this, update); + connect(checker, &BoolAspect::changed, this, update); + connect(checker, &BaseAspect::enabledChanged, this, update); + + update(); } bool BaseAspect::isReadOnly() const diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 352d0f84f8b..b460356851a 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -187,6 +187,7 @@ signals: void volatileValueChanged(); void labelLinkActivated(const QString &link); void checkedChanged(); + void enabledChanged(); protected: virtual bool internalToBuffer();