LayoutBuilder: Allow for more compact code at calling sites

Change-Id: I12bb6dbfc138e03138b9a74d36e864d8ea36092f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2019-11-07 12:22:29 +01:00
parent 8e4fb05532
commit efa9832912
13 changed files with 34 additions and 52 deletions
@@ -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;
});
+1 -2
View File
@@ -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();
@@ -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;
+2 -4
View File
@@ -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());
}
}
@@ -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);
@@ -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;
}
@@ -61,8 +61,14 @@ public:
QString text;
};
void addItem(LayoutItem item);
void startNewRow();
template<typename ...Items>
LayoutBuilder &addItems(LayoutItem first, Items... rest) {
return addItem(first).addItems(rest...);
}
LayoutBuilder &addItems() { return *this; }
LayoutBuilder &addItem(LayoutItem item);
LayoutBuilder &startNewRow();
QLayout *layout() const;
@@ -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<int>::of(&QSpinBox::valueChanged),
this, [this](int value) {
d->m_value = value * d->m_displayScaleFactor;
@@ -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());
}
}
@@ -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)
@@ -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()
@@ -130,8 +130,7 @@ void MainQmlFileAspect::addToLayout(LayoutBuilder &builder)
connect(m_fileListCombo, QOverload<int>::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
@@ -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)