From efa98329129317068909bee1c91a4dd6b26bd621 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 7 Nov 2019 12:22:29 +0100 Subject: LayoutBuilder: Allow for more compact code at calling sites Change-Id: I12bb6dbfc138e03138b9a74d36e864d8ea36092f Reviewed-by: hjk --- src/plugins/debugger/debuggerrunconfigurationaspect.cpp | 12 ++++-------- src/plugins/ios/iosrunconfiguration.cpp | 3 +-- src/plugins/projectexplorer/buildconfiguration.cpp | 6 ++---- src/plugins/projectexplorer/buildstep.cpp | 6 ++---- .../projectexplorer/customexecutablerunconfiguration.cpp | 4 +--- src/plugins/projectexplorer/projectconfiguration.cpp | 7 ++++--- src/plugins/projectexplorer/projectconfiguration.h | 10 ++++++++-- src/plugins/projectexplorer/projectconfigurationaspects.cpp | 9 +++------ src/plugins/projectexplorer/runconfiguration.cpp | 6 ++---- src/plugins/projectexplorer/runconfigurationaspects.cpp | 13 ++++--------- src/plugins/python/pythonrunconfiguration.cpp | 4 +--- .../qmlprojectmanager/qmlprojectrunconfiguration.cpp | 3 +-- .../webassembly/webassemblyrunconfigurationaspects.cpp | 3 +-- 13 files changed, 34 insertions(+), 52 deletions(-) diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp index bf9d4d9a20..c02e192213 100644 --- a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp +++ b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp @@ -168,16 +168,12 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target) QWidget *w = new QWidget; LayoutBuilder builder(w); m_cppAspect->addToLayout(builder); - builder.startNewRow(); - m_qmlAspect->addToLayout(builder); - builder.startNewRow(); - m_overrideStartupAspect->addToLayout(builder); + m_qmlAspect->addToLayout(builder.startNewRow()); + m_overrideStartupAspect->addToLayout(builder.startNewRow()); static const QByteArray env = qgetenv("QTC_DEBUGGER_MULTIPROCESS"); - if (env.toInt()) { - builder.startNewRow(); - m_multiProcessAspect->addToLayout(builder); - } + if (env.toInt()) + m_multiProcessAspect->addToLayout(builder.startNewRow()); return w; }); diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 92cb1965ab..fb1389b969 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -328,8 +328,7 @@ void IosDeviceTypeAspect::addToLayout(LayoutBuilder &builder) m_deviceTypeLabel = new QLabel(IosRunConfiguration::tr("Device type:")); - builder.addItem(m_deviceTypeLabel); - builder.addItem(m_deviceTypeComboBox); + builder.addItems(m_deviceTypeLabel, m_deviceTypeComboBox); updateValues(); diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 9496ec76a1..d1e6225b98 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -185,10 +185,8 @@ NamedWidget *BuildConfiguration::createConfigWidget() LayoutBuilder builder(widget); for (ProjectConfigurationAspect *aspect : aspects()) { - if (aspect->isVisible()) { - builder.startNewRow(); - aspect->addToLayout(builder); - } + if (aspect->isVisible()) + aspect->addToLayout(builder.startNewRow()); } return named; diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index 97d1874e81..fb8c1f3848 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -152,10 +152,8 @@ BuildStepConfigWidget *BuildStep::createConfigWidget() { LayoutBuilder builder(widget); for (ProjectConfigurationAspect *aspect : m_aspects) { - if (aspect->isVisible()) { - builder.startNewRow(); - aspect->addToLayout(builder); - } + if (aspect->isVisible()) + aspect->addToLayout(builder.startNewRow()); } } diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index e3dfd2f1a0..5903379da4 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -126,9 +126,7 @@ CustomExecutableDialog::CustomExecutableDialog(RunConfiguration *rc) { LayoutBuilder builder(detailsWidget); - builder.addItem(tr("Executable:")); - builder.addItem(m_executableChooser); - builder.startNewRow(); + builder.addItems(tr("Executable:"), m_executableChooser).startNewRow(); m_arguments.addToLayout(builder); m_workingDirectory.addToLayout(builder); m_terminal.addToLayout(builder); diff --git a/src/plugins/projectexplorer/projectconfiguration.cpp b/src/plugins/projectexplorer/projectconfiguration.cpp index 442438fc3d..2d8ea701c7 100644 --- a/src/plugins/projectexplorer/projectconfiguration.cpp +++ b/src/plugins/projectexplorer/projectconfiguration.cpp @@ -73,9 +73,10 @@ LayoutBuilder::~LayoutBuilder() flushPendingItems(); } -void LayoutBuilder::startNewRow() +LayoutBuilder &LayoutBuilder::startNewRow() { flushPendingItems(); + return *this; } void LayoutBuilder::flushPendingItems() @@ -132,12 +133,12 @@ QLayout *LayoutBuilder::layout() const return m_layout; } -void LayoutBuilder::addItem(LayoutItem item) +LayoutBuilder &LayoutBuilder::addItem(LayoutItem item) { if (item.widget && !item.widget->parent()) item.widget->setParent(m_layout->parentWidget()); - m_pendingItems.append(item); + return *this; } diff --git a/src/plugins/projectexplorer/projectconfiguration.h b/src/plugins/projectexplorer/projectconfiguration.h index 76b3080291..6377e55df8 100644 --- a/src/plugins/projectexplorer/projectconfiguration.h +++ b/src/plugins/projectexplorer/projectconfiguration.h @@ -61,8 +61,14 @@ public: QString text; }; - void addItem(LayoutItem item); - void startNewRow(); + template + LayoutBuilder &addItems(LayoutItem first, Items... rest) { + return addItem(first).addItems(rest...); + } + LayoutBuilder &addItems() { return *this; } + LayoutBuilder &addItem(LayoutItem item); + + LayoutBuilder &startNewRow(); QLayout *layout() const; diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp index 60b1ff400b..794a61efe0 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp @@ -377,8 +377,7 @@ void BaseBoolAspect::addToLayout(LayoutBuilder &builder) d->m_checkBox = new QCheckBox(d->m_label); d->m_checkBox->setChecked(d->m_value); d->m_checkBox->setToolTip(d->m_tooltip); - builder.addItem(QString()); - builder.addItem(d->m_checkBox.data()); + builder.addItems(QString(), d->m_checkBox.data()); connect(d->m_checkBox.data(), &QAbstractButton::clicked, this, [this] { d->m_value = d->m_checkBox->isChecked(); emit changed(); @@ -450,8 +449,7 @@ void BaseSelectionAspect::addToLayout(LayoutBuilder &builder) auto button = new QRadioButton(option.displayName); button->setChecked(i == d->m_value); button->setToolTip(option.tooltip); - builder.addItem(QString()); - builder.addItem(button); + builder.addItems(QString(), button); d->m_buttons.append(button); d->m_buttonGroup->addButton(button); connect(button, &QAbstractButton::clicked, this, [this, i] { @@ -521,8 +519,7 @@ void BaseIntegerAspect::addToLayout(LayoutBuilder &builder) if (d->m_maximumValue.isValid() && d->m_maximumValue.isValid()) d->m_spinBox->setRange(int(d->m_minimumValue.toLongLong() / d->m_displayScaleFactor), int(d->m_maximumValue.toLongLong() / d->m_displayScaleFactor)); - builder.addItem(d->m_label); - builder.addItem(d->m_spinBox.data()); + builder.addItems(d->m_label, d->m_spinBox.data()); connect(d->m_spinBox.data(), QOverload::of(&QSpinBox::valueChanged), this, [this](int value) { d->m_value = value * d->m_displayScaleFactor; diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 903c6f878a..4629e0bc22 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -251,10 +251,8 @@ QWidget *RunConfiguration::createConfigurationWidget() { LayoutBuilder builder(widget); for (ProjectConfigurationAspect *aspect : m_aspects) { - if (aspect->isVisible()) { - builder.startNewRow(); - aspect->addToLayout(builder); - } + if (aspect->isVisible()) + aspect->addToLayout(builder.startNewRow()); } } diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index 0d1e963263..237970e5bd 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -68,8 +68,7 @@ void TerminalAspect::addToLayout(LayoutBuilder &builder) QTC_CHECK(!m_checkBox); m_checkBox = new QCheckBox(tr("Run in terminal")); m_checkBox->setChecked(m_useTerminal); - builder.addItem(QString()); - builder.addItem(m_checkBox.data()); + builder.addItems(QString(), m_checkBox.data()); connect(m_checkBox.data(), &QAbstractButton::clicked, this, [this] { m_userSet = true; m_useTerminal = m_checkBox->isChecked(); @@ -169,9 +168,7 @@ void WorkingDirectoryAspect::addToLayout(LayoutBuilder &builder) m_chooser->setEnvironment(m_envAspect->environment()); } - builder.addItem(tr("Working directory:")); - builder.addItem(m_chooser.data()); - builder.addItem(m_resetButton.data()); + builder.addItems(tr("Working directory:"), m_chooser.data(), m_resetButton.data()); } void WorkingDirectoryAspect::acquaintSiblings(const ProjectConfigurationAspects &siblings) @@ -455,10 +452,8 @@ FilePath ExecutableAspect::executable() const void ExecutableAspect::addToLayout(LayoutBuilder &builder) { m_executable.addToLayout(builder); - if (m_alternativeExecutable) { - builder.startNewRow(); - m_alternativeExecutable->addToLayout(builder); - } + if (m_alternativeExecutable) + m_alternativeExecutable->addToLayout(builder.startNewRow()); } void ExecutableAspect::setLabelText(const QString &labelText) diff --git a/src/plugins/python/pythonrunconfiguration.cpp b/src/plugins/python/pythonrunconfiguration.cpp index 41386ef611..8af7e2f1b2 100644 --- a/src/plugins/python/pythonrunconfiguration.cpp +++ b/src/plugins/python/pythonrunconfiguration.cpp @@ -204,9 +204,7 @@ void InterpreterAspect::addToLayout(LayoutBuilder &builder) Core::ICore::showOptionsDialog(Constants::C_PYTHONOPTIONS_PAGE_ID); }); - builder.addItem(tr("Interpreter")); - builder.addItem(m_comboBox.data()); - builder.addItem(manageButton); + builder.addItems(tr("Interpreter"), m_comboBox.data(), manageButton); } void InterpreterAspect::updateCurrentInterpreter() diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index 2b093fd7af..a10ac4fa57 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -130,8 +130,7 @@ void MainQmlFileAspect::addToLayout(LayoutBuilder &builder) connect(m_fileListCombo, QOverload::of(&QComboBox::activated), this, &MainQmlFileAspect::setMainScript); - builder.addItem(QmlProjectRunConfiguration::tr("Main QML file:")); - builder.addItem(m_fileListCombo.data()); + builder.addItems(QmlProjectRunConfiguration::tr("Main QML file:"), m_fileListCombo.data()); } void MainQmlFileAspect::toMap(QVariantMap &map) const diff --git a/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp b/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp index c4c9f8f376..10c6c06d45 100644 --- a/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp +++ b/src/plugins/webassembly/webassemblyrunconfigurationaspects.cpp @@ -88,8 +88,7 @@ void WebBrowserSelectionAspect::addToLayout(ProjectExplorer::LayoutBuilder &buil m_currentBrowser = selectedBrowser; emit changed(); }); - builder.addItem(tr("Web browser:")); - builder.addItem(m_webBrowserComboBox); + builder.addItems(tr("Web browser:"), m_webBrowserComboBox); } void WebBrowserSelectionAspect::fromMap(const QVariantMap &map) -- cgit v1.2.1