Utils: Consolidate LayoutBuilder interface a bit

- the var args template for addItems was overkill creating a lot of
  instantiations. Use a temporary list instead.
- allow default constructed LayoutItems to be used for an empty cell,
  avoiding the use of a QLabel with empty text
- add an addRow({...}) overload as convenience shortcut for
  .startNewRow().addItems({...}
- rename startNewRow() to finishRow()

Change-Id: I6d49dacbac3d7acf140ca526884ba1ceeeca2e0d
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2020-09-18 04:54:41 +02:00
parent 7bba76d0ff
commit 2cabd2ceb5
20 changed files with 51 additions and 46 deletions

View File

@@ -109,7 +109,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
auto aspectWidget = new QWidget;
LayoutBuilder aspectWidgetBuilder(aspectWidget);
buildDirAspect->addToLayout(aspectWidgetBuilder);
aspectWidgetBuilder.startNewRow();
aspectWidgetBuilder.finishRow();
initialCMakeAspect->addToLayout(aspectWidgetBuilder);
mainLayout->addWidget(aspectWidget, row, 0, 1, -1);
++row;

View File

@@ -458,7 +458,7 @@ BuildStepConfigWidget *CMakeBuildStep::createConfigWidget()
auto frame = ItemViewFind::createSearchableWrapper(buildTargetsView,
ItemViewFind::LightColored);
builder.startNewRow().addItems(tr("Targets:"), frame);
builder.addRow({new QLabel(tr("Targets:")), frame});
updateDetails();

View File

@@ -175,9 +175,9 @@ void CommandBuilderAspect::addToLayout(LayoutBuilder &builder)
if (!d->m_loadedFromMap)
d->tryToMigrate();
builder.startNewRow().addItems(d->label.data(), d->commandBuilder.data());
builder.startNewRow().addItems(tr("Make command:"), d->makePathChooser.data());
builder.startNewRow().addItems(tr("Make arguments:"), d->makeArgumentsLineEdit.data());
builder.addRow({d->label.data(), d->commandBuilder.data()});
builder.addRow({tr("Make command:"), d->makePathChooser.data()});
builder.addRow({tr("Make arguments:"), d->makeArgumentsLineEdit.data()});
updateGui();
}

View File

@@ -319,7 +319,7 @@ void IosDeviceTypeAspect::addToLayout(LayoutBuilder &builder)
m_deviceTypeLabel = new QLabel(IosRunConfiguration::tr("Device type:"));
builder.addItems(m_deviceTypeLabel, m_deviceTypeComboBox);
builder.addItems({m_deviceTypeLabel, m_deviceTypeComboBox});
updateValues();

View File

@@ -112,7 +112,7 @@ BuildStepConfigWidget *NimbleTaskStep::createConfigWidget()
LayoutBuilder builder(widget);
builder.addRow(m_taskArgs);
builder.startNewRow().addItems(tr("Tasks:"), taskList);
builder.addRow({tr("Tasks:"), taskList});
auto buildSystem = dynamic_cast<NimbleBuildSystem *>(this->buildSystem());
QTC_ASSERT(buildSystem, return widget);

View File

@@ -102,7 +102,7 @@ void BuildDirectoryAspect::addToLayout(LayoutBuilder &builder)
StringAspect::addToLayout(builder);
d->problemLabel = new InfoLabel({}, InfoLabel::Warning);
d->problemLabel->setElideMode(Qt::ElideNone);
builder.startNewRow().addItems(QString(), d->problemLabel.data());
builder.addRow({{}, d->problemLabel.data()});
updateProblemLabel();
if (!d->sourceDir.isEmpty()) {
connect(this, &StringAspect::checkedChanged, builder.layout(), [this] {

View File

@@ -309,7 +309,7 @@ NamedWidget *BuildConfiguration::createConfigWidget()
LayoutBuilder builder(widget);
for (BaseAspect *aspect : aspects()) {
if (aspect->isVisible())
aspect->addToLayout(builder.startNewRow());
aspect->addToLayout(builder.finishRow());
}
return named;

View File

@@ -161,7 +161,7 @@ BuildStepConfigWidget *BuildStep::createConfigWidget()
LayoutBuilder builder(widget);
for (BaseAspect *aspect : qAsConst(m_aspects)) {
if (aspect->isVisible())
aspect->addToLayout(builder.startNewRow());
aspect->addToLayout(builder.finishRow());
}
}

View File

@@ -78,7 +78,7 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
LayoutBuilder builder(this, LayoutBuilder::GridLayout);
QLabel *label = createLabel(tr("Name:"), tr("Kit name and icon."));
builder.startNewRow().addItems({label, 1, alignment}, m_nameEdit, m_iconButton);
builder.addRow({{label, 1, alignment}, m_nameEdit, m_iconButton});
QString toolTip =
tr("<html><head/><body><p>The name of the kit suitable for generating "
@@ -91,7 +91,7 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
m_fileSystemFriendlyNameLineEdit->setValidator(new QRegularExpressionValidator(fileSystemFriendlyNameRegexp, m_fileSystemFriendlyNameLineEdit));
label = createLabel(tr("File system name:"), toolTip);
builder.startNewRow().addItems({label, 1, alignment}, m_fileSystemFriendlyNameLineEdit);
builder.addRow({{label, 1, alignment}, m_fileSystemFriendlyNameLineEdit});
connect(m_fileSystemFriendlyNameLineEdit, &QLineEdit::textChanged,
this, &KitManagerConfigWidget::setFileSystemFriendlyName);
@@ -244,7 +244,7 @@ void KitManagerConfigWidget::addAspectToWorkingCopy(KitAspect *aspect)
QLabel *label = createLabel(name, toolTip);
LayoutBuilder builder(layout());
builder.startNewRow().addItems({label, 1, alignment}, widget->mainWidget(), widget->buttonWidget());
builder.addRow({{label, 1, alignment}, widget->mainWidget(), widget->buttonWidget()});
m_widgets.append(widget);
m_labels.append(label);
}

View File

@@ -360,8 +360,8 @@ BuildStepConfigWidget *MakeStep::createConfigWidget()
builder.addRow(m_makeCommandAspect);
builder.addRow(m_userArgumentsAspect);
builder.addRow(m_jobCountContainer);
builder.startNewRow().addItems(disableInSubDirsLabel, disableInSubDirsCheckBox);
builder.startNewRow().addItems(targetsLabel, targetsList);
builder.addRow({disableInSubDirsLabel, disableInSubDirsCheckBox});
builder.addRow({targetsLabel, targetsList});
if (!m_disablingForSubDirsSupported) {
disableInSubDirsLabel->hide();

View File

@@ -226,7 +226,7 @@ QWidget *RunConfiguration::createConfigurationWidget()
LayoutBuilder builder(widget);
for (BaseAspect *aspect : qAsConst(m_aspects)) {
if (aspect->isVisible())
aspect->addToLayout(builder.startNewRow());
aspect->addToLayout(builder.finishRow());
}
}

View File

@@ -69,7 +69,7 @@ void TerminalAspect::addToLayout(LayoutBuilder &builder)
QTC_CHECK(!m_checkBox);
m_checkBox = new QCheckBox(tr("Run in terminal"));
m_checkBox->setChecked(m_useTerminal);
builder.addItems(QString(), m_checkBox.data());
builder.addItems({{}, m_checkBox.data()});
connect(m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
m_userSet = true;
m_useTerminal = m_checkBox->isChecked();
@@ -169,7 +169,7 @@ void WorkingDirectoryAspect::addToLayout(LayoutBuilder &builder)
m_chooser->setEnvironment(m_envAspect->environment());
}
builder.addItems(tr("Working directory:"), m_chooser.data(), m_resetButton.data());
builder.addItems({tr("Working directory:"), m_chooser.data(), m_resetButton.data()});
}
void WorkingDirectoryAspect::acquaintSiblings(const BaseAspects &siblings)
@@ -478,7 +478,7 @@ void ExecutableAspect::addToLayout(LayoutBuilder &builder)
{
m_executable.addToLayout(builder);
if (m_alternativeExecutable)
m_alternativeExecutable->addToLayout(builder.startNewRow());
m_alternativeExecutable->addToLayout(builder.finishRow());
}
void ExecutableAspect::setLabelText(const QString &labelText)

View File

@@ -194,7 +194,7 @@ void InterpreterAspect::addToLayout(LayoutBuilder &builder)
Core::ICore::showOptionsDialog(Constants::C_PYTHONOPTIONS_PAGE_ID);
});
builder.addItems(tr("Interpreter"), m_comboBox.data(), manageButton);
builder.addItems({tr("Interpreter"), m_comboBox.data(), manageButton});
}
void InterpreterAspect::updateCurrentInterpreter()

View File

@@ -195,16 +195,13 @@ BuildStepConfigWidget *QbsInstallStep::createConfigWidget()
commandLineTextEdit->setMinimumHeight(QFontMetrics(widget->font()).height() * 8);
LayoutBuilder builder(widget);
builder.addItems(new QLabel(tr("Install root:")), installRootValueLabel);
builder.startNewRow();
builder.addItem(new QLabel(tr("Flags:")));
builder.addRow({tr("Install root:"), installRootValueLabel});
builder.addRow(tr("Flags:"));
m_dryRun->addToLayout(builder);
m_keepGoing->addToLayout(builder);
m_cleanInstallRoot->addToLayout(builder);
builder.startNewRow();
builder.addItems(commandLineKeyLabel, commandLineTextEdit);
builder.addRow({commandLineKeyLabel, commandLineTextEdit});
const auto updateState = [this, commandLineTextEdit, installRootValueLabel] {
installRootValueLabel->setText(installRoot());

View File

@@ -84,7 +84,7 @@ void QmlMainFileAspect::addToLayout(Utils::LayoutBuilder &builder)
connect(m_fileListCombo, QOverload<int>::of(&QComboBox::activated),
this, &QmlMainFileAspect::setMainScript);
builder.addItems(tr("Main QML file:"), m_fileListCombo.data());
builder.addItems({tr("Main QML file:"), m_fileListCombo.data()});
}
void QmlMainFileAspect::toMap(QVariantMap &map) const

View File

@@ -54,7 +54,7 @@ void QmlDebuggingAspect::addToLayout(LayoutBuilder &builder)
SelectionAspect::addToLayout(builder);
const auto warningLabel = new Utils::InfoLabel({}, Utils::InfoLabel::Warning);
warningLabel->setElideMode(Qt::ElideNone);
builder.startNewRow().addItems(QString(), warningLabel);
builder.addRow({{}, warningLabel});
const auto changeHandler = [this, warningLabel] {
QString warningText;
const bool supported = m_kit && BaseQtVersion::isQmlDebuggingSupported(m_kit, &warningText);
@@ -86,7 +86,7 @@ void QtQuickCompilerAspect::addToLayout(LayoutBuilder &builder)
SelectionAspect::addToLayout(builder);
const auto warningLabel = new Utils::InfoLabel({}, Utils::InfoLabel::Warning);
warningLabel->setElideMode(Qt::ElideNone);
builder.startNewRow().addItems(QString(), warningLabel);
builder.addRow({{}, warningLabel});
const auto changeHandler = [this, warningLabel] {
QString warningText;
const bool supported = m_kit

View File

@@ -91,7 +91,7 @@ void WebBrowserSelectionAspect::addToLayout(LayoutBuilder &builder)
m_currentBrowser = selectedBrowser;
emit changed();
});
builder.addItems(tr("Web browser:"), m_webBrowserComboBox);
builder.addItems({tr("Web browser:"), m_webBrowserComboBox});
}
void WebBrowserSelectionAspect::fromMap(const QVariantMap &map)