Utils: Allow cascaded aspect "setEnabler"

Change-Id: I4e519c0ef27460b42c4e44a755e5e6cbbf49ebdf
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-08-15 14:24:32 +02:00
parent bc1ab260b4
commit 013b71b301
2 changed files with 17 additions and 8 deletions

View File

@@ -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

View File

@@ -187,6 +187,7 @@ signals:
void volatileValueChanged();
void labelLinkActivated(const QString &link);
void checkedChanged();
void enabledChanged();
protected:
virtual bool internalToBuffer();