diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 427e9fc0cbc..ba6c7b69cd9 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -701,10 +701,6 @@ class BoolAspectPrivate { 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; - UndoableValue m_undoable; }; @@ -1725,6 +1721,43 @@ BoolAspect::BoolAspect(AspectContainer *container) */ BoolAspect::~BoolAspect() = default; +void BoolAspect::addToLayoutHelper(Layouting::LayoutItem &parent, QAbstractButton *button) +{ + switch (d->m_labelPlacement) { + case LabelPlacement::Compact: + button->setText(labelText()); + parent.addItem(button); + break; + case LabelPlacement::AtCheckBox: + button->setText(labelText()); + parent.addItem(empty()); + parent.addItem(button); + break; + case LabelPlacement::InExtraLabel: + addLabeledItem(parent, button); + break; + } + + connect(button, &QAbstractButton::clicked, this, [button, this] { + pushUndo(d->m_undoable.set(button->isChecked())); + }); + + connect(&d->m_undoable.m_signal, &UndoSignaller::changed, button, [button, this] { + button->setChecked(d->m_undoable.get()); + handleGuiChanged(); + }); +} + +LayoutItem BoolAspect::adoptButton(QAbstractButton *button) +{ + LayoutItem parent; + + addToLayoutHelper(parent, button); + + bufferToGui(); + return parent; +} + /*! \reimp */ @@ -1732,45 +1765,11 @@ void BoolAspect::addToLayout(Layouting::LayoutItem &parent) { QTC_ASSERT(m_buffer == m_internal, m_buffer = m_internal); - if (!d->m_buttonIsAdopted) { - QTC_CHECK(!d->m_button); - d->m_button = createSubWidget(); - } - switch (d->m_labelPlacement) { - case LabelPlacement::Compact: - d->m_button->setText(labelText()); - parent.addItem(d->m_button.data()); - break; - case LabelPlacement::AtCheckBox: - d->m_button->setText(labelText()); - parent.addItem(empty()); - parent.addItem(d->m_button.data()); - break; - case LabelPlacement::InExtraLabel: - addLabeledItem(parent, d->m_button); - break; - } - - connect(d->m_button.data(), &QAbstractButton::clicked, this, [this] { - pushUndo(d->m_undoable.set(d->m_button->isChecked())); - }); - - connect(&d->m_undoable.m_signal, &UndoSignaller::changed, d->m_button, [this] { - d->m_button->setChecked(d->m_undoable.get()); - handleGuiChanged(); - }); + QCheckBox *checkBox = createSubWidget(); + addToLayoutHelper(parent, checkBox); bufferToGui(); } -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) { @@ -1779,14 +1778,13 @@ std::function BoolAspect::groupChecker() registerSubWidget(groupBox); groupBox->setCheckable(true); groupBox->setChecked(value()); - d->m_groupBox = groupBox; - connect(d->m_groupBox.data(), &QGroupBox::clicked, this, [this] { - pushUndo(d->m_undoable.set(d->m_groupBox->isChecked())); + connect(groupBox, &QGroupBox::clicked, this, [groupBox, this] { + pushUndo(d->m_undoable.set(groupBox->isChecked())); }); - connect(&d->m_undoable.m_signal, &UndoSignaller::changed, d->m_groupBox, [this] { - d->m_groupBox->setChecked(d->m_undoable.get()); + connect(&d->m_undoable.m_signal, &UndoSignaller::changed, groupBox, [groupBox, this] { + groupBox->setChecked(d->m_undoable.get()); handleGuiChanged(); }); bufferToGui(); diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 9dd7e357c7c..c83dbe23405 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -438,9 +438,11 @@ public: LabelPlacement labelPlacement = LabelPlacement::InExtraLabel); void setLabelPlacement(LabelPlacement labelPlacement); - void adoptButton(QAbstractButton *button); + Layouting::LayoutItem adoptButton(QAbstractButton *button); private: + void addToLayoutHelper(Layouting::LayoutItem &parent, QAbstractButton *button); + void bufferToGui() override; bool guiToBuffer() override; diff --git a/src/plugins/beautifier/clangformat/clangformat.cpp b/src/plugins/beautifier/clangformat/clangformat.cpp index 6662a6423c5..2a2cad2f41d 100644 --- a/src/plugins/beautifier/clangformat/clangformat.cpp +++ b/src/plugins/beautifier/clangformat/clangformat.cpp @@ -244,8 +244,6 @@ public: QGroupBox *options = nullptr; auto predefinedStyleButton = new QRadioButton; - s.usePredefinedStyle.adoptButton(predefinedStyleButton); - auto customizedStyleButton = new QRadioButton(Tr::tr("Use customized style:")); auto styleButtonGroup = new QButtonGroup; @@ -261,7 +259,7 @@ public: auto fallbackBlob = Row { noMargin, Tr::tr("Fallback style:"), s.fallbackStyle }.emerge(); auto predefinedBlob = Column { noMargin, s.predefinedStyle, fallbackBlob }.emerge(); - + // clang-format off Column { Group { title(Tr::tr("Configuration")), @@ -274,12 +272,13 @@ public: title(Tr::tr("Options")), bindTo(&options), Form { - s.usePredefinedStyle, predefinedBlob, br, + s.usePredefinedStyle.adoptButton(predefinedStyleButton), predefinedBlob, br, customizedStyleButton, configurations, }, }, st }.attachTo(this); + // clang-format on if (s.usePredefinedStyle.value()) predefinedStyleButton->click();