From 2152564329ce0d129a84255c05bd113e333a7607 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 4 Mar 2021 08:03:49 +0100 Subject: [PATCH] Utils: Remove BaseAspect base from AspectContainer again Turns out to get into the way more often than it helps, e.g. 'setAutoApply' operated on the base class' m_autoAspect flag instead of spreading it over the items in the container. Change-Id: I2711f2a488d1a6c30ec21d3fc481563cec6e55d4 Reviewed-by: David Schulz --- src/libs/utils/aspects.cpp | 29 +++--------------------- src/libs/utils/aspects.h | 23 ++++++++----------- src/plugins/debugger/debuggeractions.cpp | 12 +++++----- src/plugins/projectexplorer/makestep.cpp | 10 ++++---- src/plugins/projectexplorer/makestep.h | 1 - 5 files changed, 23 insertions(+), 52 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 1a02485548e..155ee558add 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -2018,8 +2017,6 @@ class AspectContainerPrivate { public: QList m_items; // Not owned - - QPointer m_groupBox; // Not owned, owned by configuration widget }; } // Internal @@ -2039,40 +2036,20 @@ AspectContainer::~AspectContainer() = default; void AspectContainer::registerAspect(BaseAspect *aspect) { d->m_items.append(aspect); - connect(aspect, &BaseAspect::changed, this, &BaseAspect::changed); } -/*! - Adds all visible sub-aspects to \a builder. -*/ -void AspectContainer::addToLayout(LayoutBuilder &builder) +void AspectContainer::registerAspects(const AspectContainer &aspects) { - if (!d->m_groupBox) { - d->m_groupBox = createSubWidget(); - d->m_groupBox->setTitle(displayName()); - } - - LayoutBuilder innerBuilder(d->m_groupBox); - for (BaseAspect *aspect : qAsConst(d->m_items)) { - if (aspect->isVisible()) - aspect->addToLayout(innerBuilder); - } - - builder.addItem(d->m_groupBox.data()); + for (BaseAspect *aspect : qAsConst(aspects.d->m_items)) + d->m_items.append(aspect); } -/*! - \reimp -*/ void AspectContainer::fromMap(const QVariantMap &map) { for (BaseAspect *aspect : qAsConst(d->m_items)) aspect->fromMap(map); } -/*! - \reimp -*/ void AspectContainer::toMap(QVariantMap &map) const { for (BaseAspect *aspect : qAsConst(d->m_items)) diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 20bc4d5be92..541f872af6a 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -506,13 +506,11 @@ private: std::unique_ptr d; }; -class QTCREATOR_UTILS_EXPORT AspectContainer : public BaseAspect +class QTCREATOR_UTILS_EXPORT AspectContainer { - Q_OBJECT - public: AspectContainer(); - ~AspectContainer() override; + ~AspectContainer(); template Aspect *addAspect(Args && ...args) @@ -522,18 +520,17 @@ public: return aspect; } void registerAspect(BaseAspect *aspect); + void registerAspects(const AspectContainer &aspects); - void addToLayout(LayoutBuilder &builder) override; + void fromMap(const QVariantMap &map); + void toMap(QVariantMap &map) const; - void fromMap(const QVariantMap &map) override; - void toMap(QVariantMap &map) const override; + void readSettings(const QSettings *settings); + void writeSettings(QSettings *settings) const; - void readSettings(const QSettings *settings) override; - void writeSettings(QSettings *settings) const override; - - void apply() override; - void cancel() override; - void finish() override; + void apply(); + void cancel(); + void finish(); void reset(); void fromMap(const QString &prefix, const QVariantMap &map); diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 5fe9576b21d..85b00d02a1f 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -677,12 +677,12 @@ DebuggerSettings::DebuggerSettings() all.registerAspect(&breakOnCatch); // ?? // Collect all - all.registerAspect(&page1); - all.registerAspect(&page2); - all.registerAspect(&page3); - all.registerAspect(&page4); - all.registerAspect(&page5); - all.registerAspect(&page6); + all.registerAspects(page1); + all.registerAspects(page2); + all.registerAspects(page3); + all.registerAspects(page4); + all.registerAspects(page5); + all.registerAspects(page6); all.forEachAspect([](BaseAspect *aspect) { aspect->setAutoApply(false); diff --git a/src/plugins/projectexplorer/makestep.cpp b/src/plugins/projectexplorer/makestep.cpp index 7e171236fe2..ec1d7d4727c 100644 --- a/src/plugins/projectexplorer/makestep.cpp +++ b/src/plugins/projectexplorer/makestep.cpp @@ -83,9 +83,7 @@ MakeStep::MakeStep(BuildStepList *parent, Id id) m_userArgumentsAspect->setLabelText(tr("Make arguments:")); m_userArgumentsAspect->setDisplayStyle(StringAspect::LineEditDisplay); - m_jobCountContainer = addAspect(); - - m_userJobCountAspect = m_jobCountContainer->addAspect(); + m_userJobCountAspect = addAspect(); m_userJobCountAspect->setSettingsKey(id.withSuffix(JOBCOUNT_SUFFIX).toString()); m_userJobCountAspect->setLabel(tr("Parallel jobs:")); m_userJobCountAspect->setRange(1, 999); @@ -93,11 +91,11 @@ MakeStep::MakeStep(BuildStepList *parent, Id id) m_userJobCountAspect->setDefaultValue(defaultJobCount()); const QString text = tr("Override MAKEFLAGS"); - m_overrideMakeflagsAspect = m_jobCountContainer->addAspect(); + m_overrideMakeflagsAspect = addAspect(); m_overrideMakeflagsAspect->setSettingsKey(id.withSuffix(OVERRIDE_MAKEFLAGS_SUFFIX).toString()); m_overrideMakeflagsAspect->setLabel(text, BoolAspect::LabelPlacement::AtCheckBox); - m_nonOverrideWarning = m_jobCountContainer->addAspect(); + m_nonOverrideWarning = addAspect(); m_nonOverrideWarning->setToolTip("

" + tr("MAKEFLAGS specifies parallel jobs. Check \"%1\" to override.") .arg(text) + "

"); @@ -353,7 +351,7 @@ QWidget *MakeStep::createConfigWidget() LayoutBuilder builder(widget); builder.addRow(m_makeCommandAspect); builder.addRow(m_userArgumentsAspect); - builder.addRow(m_jobCountContainer); + builder.addRow({m_userJobCountAspect, m_overrideMakeflagsAspect, m_nonOverrideWarning}); if (m_disablingForSubDirsSupported) builder.addRow(m_disabledForSubdirsAspect); builder.addRow(m_buildTargetsAspect); diff --git a/src/plugins/projectexplorer/makestep.h b/src/plugins/projectexplorer/makestep.h index 2b805b12640..5d6e99dda60 100644 --- a/src/plugins/projectexplorer/makestep.h +++ b/src/plugins/projectexplorer/makestep.h @@ -95,7 +95,6 @@ private: QStringList m_availableTargets; // FIXME: Unused, remove in 4.15. Utils::StringAspect *m_makeCommandAspect = nullptr; Utils::StringAspect *m_userArgumentsAspect = nullptr; - Utils::AspectContainer *m_jobCountContainer = nullptr; Utils::IntegerAspect *m_userJobCountAspect = nullptr; Utils::BoolAspect *m_overrideMakeflagsAspect = nullptr; Utils::BoolAspect *m_disabledForSubdirsAspect = nullptr;