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 <david.schulz@qt.io>
This commit is contained in:
hjk
2021-03-04 08:03:49 +01:00
parent b3095b80c8
commit 2152564329
5 changed files with 23 additions and 52 deletions

View File

@@ -41,7 +41,6 @@
#include <QComboBox> #include <QComboBox>
#include <QDebug> #include <QDebug>
#include <QFormLayout> #include <QFormLayout>
#include <QGroupBox>
#include <QLabel> #include <QLabel>
#include <QLineEdit> #include <QLineEdit>
#include <QListWidget> #include <QListWidget>
@@ -2018,8 +2017,6 @@ class AspectContainerPrivate
{ {
public: public:
QList<BaseAspect *> m_items; // Not owned QList<BaseAspect *> m_items; // Not owned
QPointer<QGroupBox> m_groupBox; // Not owned, owned by configuration widget
}; };
} // Internal } // Internal
@@ -2039,40 +2036,20 @@ AspectContainer::~AspectContainer() = default;
void AspectContainer::registerAspect(BaseAspect *aspect) void AspectContainer::registerAspect(BaseAspect *aspect)
{ {
d->m_items.append(aspect); d->m_items.append(aspect);
connect(aspect, &BaseAspect::changed, this, &BaseAspect::changed);
} }
/*! void AspectContainer::registerAspects(const AspectContainer &aspects)
Adds all visible sub-aspects to \a builder.
*/
void AspectContainer::addToLayout(LayoutBuilder &builder)
{ {
if (!d->m_groupBox) { for (BaseAspect *aspect : qAsConst(aspects.d->m_items))
d->m_groupBox = createSubWidget<QGroupBox>(); d->m_items.append(aspect);
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());
} }
/*!
\reimp
*/
void AspectContainer::fromMap(const QVariantMap &map) void AspectContainer::fromMap(const QVariantMap &map)
{ {
for (BaseAspect *aspect : qAsConst(d->m_items)) for (BaseAspect *aspect : qAsConst(d->m_items))
aspect->fromMap(map); aspect->fromMap(map);
} }
/*!
\reimp
*/
void AspectContainer::toMap(QVariantMap &map) const void AspectContainer::toMap(QVariantMap &map) const
{ {
for (BaseAspect *aspect : qAsConst(d->m_items)) for (BaseAspect *aspect : qAsConst(d->m_items))

View File

@@ -506,13 +506,11 @@ private:
std::unique_ptr<Internal::TextDisplayPrivate> d; std::unique_ptr<Internal::TextDisplayPrivate> d;
}; };
class QTCREATOR_UTILS_EXPORT AspectContainer : public BaseAspect class QTCREATOR_UTILS_EXPORT AspectContainer
{ {
Q_OBJECT
public: public:
AspectContainer(); AspectContainer();
~AspectContainer() override; ~AspectContainer();
template <class Aspect, typename ...Args> template <class Aspect, typename ...Args>
Aspect *addAspect(Args && ...args) Aspect *addAspect(Args && ...args)
@@ -522,18 +520,17 @@ public:
return aspect; return aspect;
} }
void registerAspect(BaseAspect *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 readSettings(const QSettings *settings);
void toMap(QVariantMap &map) const override; void writeSettings(QSettings *settings) const;
void readSettings(const QSettings *settings) override; void apply();
void writeSettings(QSettings *settings) const override; void cancel();
void finish();
void apply() override;
void cancel() override;
void finish() override;
void reset(); void reset();
void fromMap(const QString &prefix, const QVariantMap &map); void fromMap(const QString &prefix, const QVariantMap &map);

View File

@@ -677,12 +677,12 @@ DebuggerSettings::DebuggerSettings()
all.registerAspect(&breakOnCatch); // ?? all.registerAspect(&breakOnCatch); // ??
// Collect all // Collect all
all.registerAspect(&page1); all.registerAspects(page1);
all.registerAspect(&page2); all.registerAspects(page2);
all.registerAspect(&page3); all.registerAspects(page3);
all.registerAspect(&page4); all.registerAspects(page4);
all.registerAspect(&page5); all.registerAspects(page5);
all.registerAspect(&page6); all.registerAspects(page6);
all.forEachAspect([](BaseAspect *aspect) { all.forEachAspect([](BaseAspect *aspect) {
aspect->setAutoApply(false); aspect->setAutoApply(false);

View File

@@ -83,9 +83,7 @@ MakeStep::MakeStep(BuildStepList *parent, Id id)
m_userArgumentsAspect->setLabelText(tr("Make arguments:")); m_userArgumentsAspect->setLabelText(tr("Make arguments:"));
m_userArgumentsAspect->setDisplayStyle(StringAspect::LineEditDisplay); m_userArgumentsAspect->setDisplayStyle(StringAspect::LineEditDisplay);
m_jobCountContainer = addAspect<AspectContainer>(); m_userJobCountAspect = addAspect<IntegerAspect>();
m_userJobCountAspect = m_jobCountContainer->addAspect<IntegerAspect>();
m_userJobCountAspect->setSettingsKey(id.withSuffix(JOBCOUNT_SUFFIX).toString()); m_userJobCountAspect->setSettingsKey(id.withSuffix(JOBCOUNT_SUFFIX).toString());
m_userJobCountAspect->setLabel(tr("Parallel jobs:")); m_userJobCountAspect->setLabel(tr("Parallel jobs:"));
m_userJobCountAspect->setRange(1, 999); m_userJobCountAspect->setRange(1, 999);
@@ -93,11 +91,11 @@ MakeStep::MakeStep(BuildStepList *parent, Id id)
m_userJobCountAspect->setDefaultValue(defaultJobCount()); m_userJobCountAspect->setDefaultValue(defaultJobCount());
const QString text = tr("Override MAKEFLAGS"); const QString text = tr("Override MAKEFLAGS");
m_overrideMakeflagsAspect = m_jobCountContainer->addAspect<BoolAspect>(); m_overrideMakeflagsAspect = addAspect<BoolAspect>();
m_overrideMakeflagsAspect->setSettingsKey(id.withSuffix(OVERRIDE_MAKEFLAGS_SUFFIX).toString()); m_overrideMakeflagsAspect->setSettingsKey(id.withSuffix(OVERRIDE_MAKEFLAGS_SUFFIX).toString());
m_overrideMakeflagsAspect->setLabel(text, BoolAspect::LabelPlacement::AtCheckBox); m_overrideMakeflagsAspect->setLabel(text, BoolAspect::LabelPlacement::AtCheckBox);
m_nonOverrideWarning = m_jobCountContainer->addAspect<TextDisplay>(); m_nonOverrideWarning = addAspect<TextDisplay>();
m_nonOverrideWarning->setToolTip("<html><body><p>" + m_nonOverrideWarning->setToolTip("<html><body><p>" +
tr("<code>MAKEFLAGS</code> specifies parallel jobs. Check \"%1\" to override.") tr("<code>MAKEFLAGS</code> specifies parallel jobs. Check \"%1\" to override.")
.arg(text) + "</p></body></html>"); .arg(text) + "</p></body></html>");
@@ -353,7 +351,7 @@ QWidget *MakeStep::createConfigWidget()
LayoutBuilder builder(widget); LayoutBuilder builder(widget);
builder.addRow(m_makeCommandAspect); builder.addRow(m_makeCommandAspect);
builder.addRow(m_userArgumentsAspect); builder.addRow(m_userArgumentsAspect);
builder.addRow(m_jobCountContainer); builder.addRow({m_userJobCountAspect, m_overrideMakeflagsAspect, m_nonOverrideWarning});
if (m_disablingForSubDirsSupported) if (m_disablingForSubDirsSupported)
builder.addRow(m_disabledForSubdirsAspect); builder.addRow(m_disabledForSubdirsAspect);
builder.addRow(m_buildTargetsAspect); builder.addRow(m_buildTargetsAspect);

View File

@@ -95,7 +95,6 @@ private:
QStringList m_availableTargets; // FIXME: Unused, remove in 4.15. QStringList m_availableTargets; // FIXME: Unused, remove in 4.15.
Utils::StringAspect *m_makeCommandAspect = nullptr; Utils::StringAspect *m_makeCommandAspect = nullptr;
Utils::StringAspect *m_userArgumentsAspect = nullptr; Utils::StringAspect *m_userArgumentsAspect = nullptr;
Utils::AspectContainer *m_jobCountContainer = nullptr;
Utils::IntegerAspect *m_userJobCountAspect = nullptr; Utils::IntegerAspect *m_userJobCountAspect = nullptr;
Utils::BoolAspect *m_overrideMakeflagsAspect = nullptr; Utils::BoolAspect *m_overrideMakeflagsAspect = nullptr;
Utils::BoolAspect *m_disabledForSubdirsAspect = nullptr; Utils::BoolAspect *m_disabledForSubdirsAspect = nullptr;