forked from qt-creator/qt-creator
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:
@@ -414,7 +414,7 @@ void StringAspect::addToLayout(LayoutBuilder &builder)
|
||||
|
||||
if (d->m_checker && d->m_checkBoxPlacement == CheckBoxPlacement::Top) {
|
||||
d->m_checker->addToLayout(builder);
|
||||
builder.startNewRow();
|
||||
builder.finishRow();
|
||||
}
|
||||
|
||||
d->m_label = new QLabel;
|
||||
@@ -660,7 +660,7 @@ void SelectionAspect::addToLayout(LayoutBuilder &builder)
|
||||
auto button = new QRadioButton(option.displayName);
|
||||
button->setChecked(i == d->m_value);
|
||||
button->setToolTip(option.tooltip);
|
||||
builder.addItems(QString(), button);
|
||||
builder.addItems({{}, button});
|
||||
d->m_buttons.append(button);
|
||||
d->m_buttonGroup->addButton(button);
|
||||
connect(button, &QAbstractButton::clicked, this, [this, i] {
|
||||
@@ -679,7 +679,7 @@ void SelectionAspect::addToLayout(LayoutBuilder &builder)
|
||||
connect(d->m_comboBox.data(), QOverload<int>::of(&QComboBox::activated), this,
|
||||
[this](int index) { d->m_value = index; emit changed(); });
|
||||
d->m_comboBox->setCurrentIndex(d->m_value);
|
||||
builder.addItems(d->m_label.data(), d->m_comboBox.data());
|
||||
builder.addItems({d->m_label.data(), d->m_comboBox.data()});
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -779,7 +779,7 @@ void IntegerAspect::addToLayout(LayoutBuilder &builder)
|
||||
d->m_spinBox->setRange(int(d->m_minimumValue.toLongLong() / d->m_displayScaleFactor),
|
||||
int(d->m_maximumValue.toLongLong() / d->m_displayScaleFactor));
|
||||
|
||||
builder.addItems(d->m_label.data(), d->m_spinBox.data());
|
||||
builder.addItems({d->m_label.data(), 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;
|
||||
|
@@ -64,7 +64,7 @@ LayoutBuilder::~LayoutBuilder()
|
||||
flushPendingFormItems();
|
||||
}
|
||||
|
||||
LayoutBuilder &LayoutBuilder::startNewRow()
|
||||
LayoutBuilder &LayoutBuilder::finishRow()
|
||||
{
|
||||
if (m_formLayout)
|
||||
flushPendingFormItems();
|
||||
@@ -79,9 +79,12 @@ LayoutBuilder &LayoutBuilder::startNewRow()
|
||||
|
||||
LayoutBuilder &LayoutBuilder::addRow(const LayoutItem &item)
|
||||
{
|
||||
startNewRow();
|
||||
addItem(item);
|
||||
return *this;
|
||||
return finishRow().addItem(item);
|
||||
}
|
||||
|
||||
LayoutBuilder &LayoutBuilder::addRow(const QList<LayoutBuilder::LayoutItem> &items)
|
||||
{
|
||||
return finishRow().addItems(items);
|
||||
}
|
||||
|
||||
void LayoutBuilder::flushPendingFormItems()
|
||||
@@ -139,7 +142,7 @@ QLayout *LayoutBuilder::layout() const
|
||||
return m_gridLayout;
|
||||
}
|
||||
|
||||
LayoutBuilder &LayoutBuilder::addItem(LayoutItem item)
|
||||
LayoutBuilder &LayoutBuilder::addItem(const LayoutItem &item)
|
||||
{
|
||||
if (item.widget && !item.widget->parent())
|
||||
item.widget->setParent(layout()->parentWidget());
|
||||
@@ -158,4 +161,11 @@ LayoutBuilder &LayoutBuilder::addItem(LayoutItem item)
|
||||
return *this;
|
||||
}
|
||||
|
||||
LayoutBuilder &LayoutBuilder::addItems(const QList<LayoutBuilder::LayoutItem> &items)
|
||||
{
|
||||
for (const LayoutItem &item : items)
|
||||
addItem(item);
|
||||
return *this;
|
||||
}
|
||||
|
||||
} // Utils
|
||||
|
@@ -53,6 +53,7 @@ public:
|
||||
class LayoutItem
|
||||
{
|
||||
public:
|
||||
LayoutItem() {} // For empty cells.
|
||||
LayoutItem(QLayout *layout, int span = 1) : layout(layout), span(span) {}
|
||||
LayoutItem(QWidget *widget, int span = 1, Qt::Alignment align = {})
|
||||
: widget(widget), span(span), align(align) {}
|
||||
@@ -67,15 +68,12 @@ public:
|
||||
Qt::Alignment align;
|
||||
};
|
||||
|
||||
template<typename ...Items>
|
||||
LayoutBuilder &addItems(LayoutItem first, Items... rest) {
|
||||
return addItem(first).addItems(rest...);
|
||||
}
|
||||
LayoutBuilder &addItems() { return *this; }
|
||||
LayoutBuilder &addItem(LayoutItem item);
|
||||
LayoutBuilder &addItem(const LayoutItem &item);
|
||||
LayoutBuilder &addItems(const QList<LayoutItem> &items);
|
||||
|
||||
LayoutBuilder &startNewRow();
|
||||
LayoutBuilder &finishRow();
|
||||
LayoutBuilder &addRow(const LayoutItem &item);
|
||||
LayoutBuilder &addRow(const QList<LayoutItem> &items);
|
||||
|
||||
QLayout *layout() const;
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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();
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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] {
|
||||
|
@@ -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;
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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()
|
||||
|
@@ -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());
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user