From a21b96f4b6bc252c20824c0d807583df4b905f49 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 12 May 2023 10:09:52 +0200 Subject: Utils: Allow a BoolAspect to adopt an external button This will be used by the apply machinery and allows more complex setups than the automatically generated internal CheckBox button. Change-Id: I237a9283253f11bcb76e0366a0b6c5a0346fdfd8 Reviewed-by: Reviewed-by: Alessandro Portale --- src/libs/utils/aspects.cpp | 16 ++++++++++++++-- src/libs/utils/aspects.h | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 541b258c0b..549a394273 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -587,6 +587,7 @@ public: BoolAspect::LabelPlacement m_labelPlacement = BoolAspect::LabelPlacement::AtCheckBox; QPointer m_button; // Owned by configuration widget QPointer m_groupBox; // For BoolAspects handling GroupBox check boxes + bool m_buttonIsAdopted = false; }; class ColorAspectPrivate @@ -1446,8 +1447,10 @@ BoolAspect::~BoolAspect() = default; */ void BoolAspect::addToLayout(Layouting::LayoutItem &parent) { - QTC_CHECK(!d->m_button); - d->m_button = createSubWidget(); + if (!d->m_buttonIsAdopted) { + QTC_CHECK(!d->m_button); + d->m_button = createSubWidget(); + } switch (d->m_labelPlacement) { case LabelPlacement::AtCheckBoxWithoutDummyLabel: d->m_button->setText(labelText()); @@ -1474,6 +1477,15 @@ void BoolAspect::addToLayout(Layouting::LayoutItem &parent) this, &BoolAspect::volatileValueChanged); } +void BoolAspect::adoptButton(QAbstractButton *button) +{ + QTC_ASSERT(button, return); + QTC_CHECK(!d->m_button); + d->m_button = button; + d->m_buttonIsAdopted = true; + registerSubWidget(button); +} + std::function BoolAspect::groupChecker() { return [this](QObject *target) { diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 1a2570ea83..f6a35fa4ef 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -240,6 +240,8 @@ public: LabelPlacement labelPlacement = LabelPlacement::InExtraLabel); void setLabelPlacement(LabelPlacement labelPlacement); + void adoptButton(QAbstractButton *button); + signals: void valueChanged(bool newValue); void volatileValueChanged(bool newValue); -- cgit v1.2.1