aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-10-15 17:20:51 +0200
committerhjk <hjk@qt.io>2019-10-18 12:24:39 +0000
commit6eaf239777a3166f2504b0dff90bb4afcacba89f (patch)
tree32a2ffa2028e3ba487d62b380e40aab866c1e39f /src/plugins/projectexplorer
parent02350520c211bf5aa4f2804c1d19d28d710daa20 (diff)
ProjectExplorer: Prepare more flexibility to aspect layouting
This hides the explicit use of a QFormLayout from the aspect interface in a new LayoutBuilder class. That currently works only on a QFormLayout in the back, but opens the possibility to use e.g. a QGridLayout as use on the Kits and some option pages. The aspects now only announce sub-widgets they like to add, actuall positioning is does by a new LayoutBuilder class, also cramming several widgets in an hbox in the right column of the QFormLayout is done there. Change-Id: I2b788192c465f2ab82261849d34e514697c5a491 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer')
-rw-r--r--src/plugins/projectexplorer/buildconfiguration.cpp11
-rw-r--r--src/plugins/projectexplorer/buildstep.cpp15
-rw-r--r--src/plugins/projectexplorer/customexecutablerunconfiguration.cpp21
-rw-r--r--src/plugins/projectexplorer/projectconfiguration.cpp89
-rw-r--r--src/plugins/projectexplorer/projectconfiguration.h38
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.cpp54
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.h8
-rw-r--r--src/plugins/projectexplorer/runconfiguration.cpp15
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp36
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.h8
10 files changed, 206 insertions, 89 deletions
diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp
index ccf333aa21..9154360970 100644
--- a/src/plugins/projectexplorer/buildconfiguration.cpp
+++ b/src/plugins/projectexplorer/buildconfiguration.cpp
@@ -157,13 +157,12 @@ NamedWidget *BuildConfiguration::createConfigWidget()
widget = named;
}
- auto formLayout = new QFormLayout(widget);
- formLayout->setContentsMargins(0, 0, 0, 0);
- formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
-
+ LayoutBuilder builder(widget);
for (ProjectConfigurationAspect *aspect : aspects()) {
- if (aspect->isVisible())
- aspect->addToConfigurationLayout(formLayout);
+ if (aspect->isVisible()) {
+ builder.startNewRow();
+ aspect->addToLayout(builder);
+ }
}
return named;
diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp
index 38968fe514..97d1874e81 100644
--- a/src/plugins/projectexplorer/buildstep.cpp
+++ b/src/plugins/projectexplorer/buildstep.cpp
@@ -149,13 +149,14 @@ BuildStepConfigWidget *BuildStep::createConfigWidget()
{
auto widget = new BuildStepConfigWidget(this);
- auto formLayout = new QFormLayout(widget);
- formLayout->setContentsMargins(0, 0, 0, 0);
- formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
-
- for (ProjectConfigurationAspect *aspect : m_aspects) {
- if (aspect->isVisible())
- aspect->addToConfigurationLayout(formLayout);
+ {
+ LayoutBuilder builder(widget);
+ for (ProjectConfigurationAspect *aspect : m_aspects) {
+ if (aspect->isVisible()) {
+ builder.startNewRow();
+ aspect->addToLayout(builder);
+ }
+ }
}
connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged,
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 2f5e4463b7..e3dfd2f1a0 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -99,10 +99,6 @@ CustomExecutableDialog::CustomExecutableDialog(RunConfiguration *rc)
auto vbox = new QVBoxLayout(this);
vbox->addWidget(new QLabel(tr("Could not find the executable, please specify one.")));
- auto layout = new QFormLayout;
- layout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
- layout->setContentsMargins(0, 0, 0, 0);
-
auto detailsContainer = new DetailsWidget(this);
detailsContainer->setState(DetailsWidget::NoSummary);
vbox->addWidget(detailsContainer);
@@ -116,24 +112,27 @@ CustomExecutableDialog::CustomExecutableDialog(RunConfiguration *rc)
auto detailsWidget = new QWidget(detailsContainer);
detailsContainer->setWidget(detailsWidget);
- detailsWidget->setLayout(layout);
m_executableChooser = new PathChooser(this);
m_executableChooser->setHistoryCompleter("Qt.CustomExecutable.History");
m_executableChooser->setExpectedKind(PathChooser::ExistingCommand);
m_executableChooser->setPath(rc->aspect<ExecutableAspect>()->executable().toString());
- layout->addRow(tr("Executable:"), m_executableChooser);
connect(m_executableChooser, &PathChooser::rawPathChanged,
this, &CustomExecutableDialog::changed);
copyAspect(rc->aspect<ArgumentsAspect>(), &m_arguments);
- m_arguments.addToConfigurationLayout(layout);
-
copyAspect(rc->aspect<WorkingDirectoryAspect>(), &m_workingDirectory);
- m_workingDirectory.addToConfigurationLayout(layout);
-
copyAspect(rc->aspect<TerminalAspect>(), &m_terminal);
- m_terminal.addToConfigurationLayout(layout);
+
+ {
+ LayoutBuilder builder(detailsWidget);
+ builder.addItem(tr("Executable:"));
+ builder.addItem(m_executableChooser);
+ builder.startNewRow();
+ m_arguments.addToLayout(builder);
+ m_workingDirectory.addToLayout(builder);
+ m_terminal.addToLayout(builder);
+ }
auto enviromentAspect = rc->aspect<EnvironmentAspect>();
connect(enviromentAspect, &EnvironmentAspect::environmentChanged,
diff --git a/src/plugins/projectexplorer/projectconfiguration.cpp b/src/plugins/projectexplorer/projectconfiguration.cpp
index 5ad0299034..442438fc3d 100644
--- a/src/plugins/projectexplorer/projectconfiguration.cpp
+++ b/src/plugins/projectexplorer/projectconfiguration.cpp
@@ -29,6 +29,9 @@
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
+#include <QFormLayout>
+#include <QWidget>
+
using namespace ProjectExplorer;
const char CONFIGURATION_ID_KEY[] = "ProjectExplorer.ProjectConfiguration.Id";
@@ -51,6 +54,92 @@ QWidget *ProjectConfigurationAspect::createConfigWidget() const
return m_configWidgetCreator ? m_configWidgetCreator() : nullptr;
}
+void ProjectConfigurationAspect::addToLayout(LayoutBuilder &)
+{
+}
+
+// LayoutBuilder
+
+LayoutBuilder::LayoutBuilder(QWidget *parent)
+ : m_layout(new QFormLayout(parent))
+{
+ m_layout->setContentsMargins(0, 0, 0, 0);
+ if (auto fl = qobject_cast<QFormLayout *>(m_layout))
+ fl->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
+}
+
+LayoutBuilder::~LayoutBuilder()
+{
+ flushPendingItems();
+}
+
+void LayoutBuilder::startNewRow()
+{
+ flushPendingItems();
+}
+
+void LayoutBuilder::flushPendingItems()
+{
+ if (m_pendingItems.isEmpty())
+ return;
+
+ if (auto fl = qobject_cast<QFormLayout *>(m_layout)) {
+ // If there are more than two items, we cram the last ones in one hbox.
+ if (m_pendingItems.size() > 2) {
+ auto hbox = new QHBoxLayout;
+ for (int i = 1; i < m_pendingItems.size(); ++i) {
+ if (QWidget *w = m_pendingItems.at(i).widget)
+ hbox->addWidget(w);
+ else if (QLayout *l = m_pendingItems.at(i).layout)
+ hbox->addItem(l);
+ else
+ QTC_CHECK(false);
+ }
+ while (m_pendingItems.size() >= 2)
+ m_pendingItems.takeLast();
+ m_pendingItems.append(LayoutItem(hbox));
+ }
+
+ if (m_pendingItems.size() == 1) { // One one item given, so this spans both columns.
+ if (auto layout = m_pendingItems.at(0).layout)
+ fl->addRow(layout);
+ else if (auto widget = m_pendingItems.at(0).widget)
+ fl->addRow(widget);
+ } else if (m_pendingItems.size() == 2) { // Normal case, both columns used.
+ if (auto label = m_pendingItems.at(0).widget) {
+ if (auto layout = m_pendingItems.at(1).layout)
+ fl->addRow(label, layout);
+ else if (auto widget = m_pendingItems.at(1).widget)
+ fl->addRow(label, widget);
+ } else {
+ if (auto layout = m_pendingItems.at(1).layout)
+ fl->addRow(m_pendingItems.at(0).text, layout);
+ else if (auto widget = m_pendingItems.at(1).widget)
+ fl->addRow(m_pendingItems.at(0).text, widget);
+ }
+ } else {
+ QTC_CHECK(false);
+ }
+ } else {
+ QTC_CHECK(false);
+ }
+
+ m_pendingItems.clear();
+}
+
+QLayout *LayoutBuilder::layout() const
+{
+ return m_layout;
+}
+
+void LayoutBuilder::addItem(LayoutItem item)
+{
+ if (item.widget && !item.widget->parent())
+ item.widget->setParent(m_layout->parentWidget());
+
+ m_pendingItems.append(item);
+}
+
// ProjectConfigurationAspects
diff --git a/src/plugins/projectexplorer/projectconfiguration.h b/src/plugins/projectexplorer/projectconfiguration.h
index bc6d33fce8..76b3080291 100644
--- a/src/plugins/projectexplorer/projectconfiguration.h
+++ b/src/plugins/projectexplorer/projectconfiguration.h
@@ -35,10 +35,7 @@
#include <QPointer>
#include <QString>
#include <QVariantMap>
-
-QT_BEGIN_NAMESPACE
-class QFormLayout;
-QT_END_NAMESPACE
+#include <QWidget>
namespace ProjectExplorer {
@@ -46,6 +43,36 @@ class Project;
class ProjectConfigurationAspects;
class Target;
+class PROJECTEXPLORER_EXPORT LayoutBuilder
+{
+public:
+ explicit LayoutBuilder(QWidget *parent);
+ ~LayoutBuilder();
+
+ class LayoutItem
+ {
+ public:
+ LayoutItem(QLayout *layout) : layout(layout) {}
+ LayoutItem(QWidget *widget) : widget(widget) {}
+ LayoutItem(const QString &text) : text(text) {}
+
+ QLayout *layout = nullptr;
+ QWidget *widget = nullptr;
+ QString text;
+ };
+
+ void addItem(LayoutItem item);
+ void startNewRow();
+
+ QLayout *layout() const;
+
+private:
+ void flushPendingItems();
+
+ QLayout *m_layout = nullptr;
+ QList<LayoutItem> m_pendingItems;
+};
+
class PROJECTEXPLORER_EXPORT ProjectConfigurationAspect : public QObject
{
Q_OBJECT
@@ -71,9 +98,10 @@ public:
virtual void fromMap(const QVariantMap &) {}
virtual void toMap(QVariantMap &) const {}
- virtual void addToConfigurationLayout(QFormLayout *) {}
virtual void acquaintSiblings(const ProjectConfigurationAspects &) {}
+ virtual void addToLayout(LayoutBuilder &builder);
+
signals:
void changed();
diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
index 692c5d77b9..60b1ff400b 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
@@ -253,20 +253,19 @@ void BaseStringAspect::setReadOnly(bool readOnly)
d->m_textEditDisplay->setReadOnly(readOnly);
}
-void BaseStringAspect::addToConfigurationLayout(QFormLayout *layout)
+void BaseStringAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!d->m_label);
- QWidget *parent = layout->parentWidget();
- d->m_label = new QLabel(parent);
+ d->m_label = new QLabel;
d->m_label->setTextInteractionFlags(Qt::TextSelectableByMouse);
d->m_label->setText(d->m_labelText);
if (!d->m_labelPixmap.isNull())
d->m_label->setPixmap(d->m_labelPixmap);
+ builder.addItem(d->m_label.data());
- auto hbox = new QHBoxLayout;
switch (d->m_displayStyle) {
case PathChooserDisplay:
- d->m_pathChooserDisplay = new PathChooser(parent);
+ d->m_pathChooserDisplay = new PathChooser;
d->m_pathChooserDisplay->setExpectedKind(d->m_expectedKind);
if (!d->m_historyCompleterKey.isEmpty())
d->m_pathChooserDisplay->setHistoryCompleter(d->m_historyCompleterKey);
@@ -275,20 +274,20 @@ void BaseStringAspect::addToConfigurationLayout(QFormLayout *layout)
d->m_pathChooserDisplay->setReadOnly(d->m_readOnly);
connect(d->m_pathChooserDisplay, &PathChooser::pathChanged,
this, &BaseStringAspect::setValue);
- hbox->addWidget(d->m_pathChooserDisplay);
+ builder.addItem(d->m_pathChooserDisplay.data());
break;
case LineEditDisplay:
- d->m_lineEditDisplay = new FancyLineEdit(parent);
+ d->m_lineEditDisplay = new FancyLineEdit;
d->m_lineEditDisplay->setPlaceholderText(d->m_placeHolderText);
if (!d->m_historyCompleterKey.isEmpty())
d->m_lineEditDisplay->setHistoryCompleter(d->m_historyCompleterKey);
d->m_lineEditDisplay->setReadOnly(d->m_readOnly);
connect(d->m_lineEditDisplay, &FancyLineEdit::textEdited,
this, &BaseStringAspect::setValue);
- hbox->addWidget(d->m_lineEditDisplay);
+ builder.addItem(d->m_lineEditDisplay.data());
break;
case TextEditDisplay:
- d->m_textEditDisplay = new QTextEdit(parent);
+ d->m_textEditDisplay = new QTextEdit;
d->m_textEditDisplay->setPlaceholderText(d->m_placeHolderText);
d->m_textEditDisplay->setReadOnly(d->m_readOnly);
connect(d->m_textEditDisplay, &QTextEdit::textChanged, this, [this] {
@@ -298,23 +297,17 @@ void BaseStringAspect::addToConfigurationLayout(QFormLayout *layout)
emit changed();
}
});
- hbox->addWidget(d->m_textEditDisplay);
+ builder.addItem(d->m_textEditDisplay.data());
break;
case LabelDisplay:
- d->m_labelDisplay = new QLabel(parent);
+ d->m_labelDisplay = new QLabel;
d->m_labelDisplay->setTextInteractionFlags(Qt::TextSelectableByMouse);
- hbox->addWidget(d->m_labelDisplay);
+ builder.addItem(d->m_labelDisplay.data());
break;
}
- if (d->m_checker) {
- auto form = new QFormLayout;
- form->setContentsMargins(0, 0, 0, 0);
- form->setFormAlignment(Qt::AlignLeft | Qt::AlignVCenter);
- d->m_checker->addToConfigurationLayout(form);
- hbox->addLayout(form);
- }
- layout->addRow(d->m_label, hbox);
+ if (d->m_checker)
+ d->m_checker->addToLayout(builder);
update();
}
@@ -378,13 +371,14 @@ BaseBoolAspect::BaseBoolAspect(const QString &settingsKey)
BaseBoolAspect::~BaseBoolAspect() = default;
-void BaseBoolAspect::addToConfigurationLayout(QFormLayout *layout)
+void BaseBoolAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!d->m_checkBox);
- d->m_checkBox = new QCheckBox(d->m_label, layout->parentWidget());
+ d->m_checkBox = new QCheckBox(d->m_label);
d->m_checkBox->setChecked(d->m_value);
d->m_checkBox->setToolTip(d->m_tooltip);
- layout->addRow(QString(), d->m_checkBox);
+ builder.addItem(QString());
+ builder.addItem(d->m_checkBox.data());
connect(d->m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
d->m_value = d->m_checkBox->isChecked();
emit changed();
@@ -444,7 +438,7 @@ BaseSelectionAspect::BaseSelectionAspect()
BaseSelectionAspect::~BaseSelectionAspect() = default;
-void BaseSelectionAspect::addToConfigurationLayout(QFormLayout *layout)
+void BaseSelectionAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(d->m_buttonGroup == nullptr);
d->m_buttonGroup = new QButtonGroup;
@@ -453,10 +447,11 @@ void BaseSelectionAspect::addToConfigurationLayout(QFormLayout *layout)
QTC_ASSERT(d->m_buttons.isEmpty(), d->m_buttons.clear());
for (int i = 0, n = d->m_options.size(); i < n; ++i) {
const Internal::BaseSelectionAspectPrivate::Option &option = d->m_options.at(i);
- auto button = new QRadioButton(option.displayName, layout->parentWidget());
+ auto button = new QRadioButton(option.displayName);
button->setChecked(i == d->m_value);
button->setToolTip(option.tooltip);
- layout->addRow(QString(), button);
+ builder.addItem(QString());
+ builder.addItem(button);
d->m_buttons.append(button);
d->m_buttonGroup->addButton(button);
connect(button, &QAbstractButton::clicked, this, [this, i] {
@@ -515,10 +510,10 @@ BaseIntegerAspect::BaseIntegerAspect()
BaseIntegerAspect::~BaseIntegerAspect() = default;
-void BaseIntegerAspect::addToConfigurationLayout(QFormLayout *layout)
+void BaseIntegerAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!d->m_spinBox);
- d->m_spinBox = new QSpinBox(layout->parentWidget());
+ d->m_spinBox = new QSpinBox;
d->m_spinBox->setValue(int(d->m_value / d->m_displayScaleFactor));
d->m_spinBox->setDisplayIntegerBase(d->m_displayIntegerBase);
d->m_spinBox->setPrefix(d->m_prefix);
@@ -526,7 +521,8 @@ void BaseIntegerAspect::addToConfigurationLayout(QFormLayout *layout)
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));
- layout->addRow(d->m_label, d->m_spinBox);
+ builder.addItem(d->m_label);
+ builder.addItem(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;
diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.h b/src/plugins/projectexplorer/projectconfigurationaspects.h
index 3195ad63fc..90bdcbc2bb 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.h
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.h
@@ -50,7 +50,7 @@ public:
explicit BaseBoolAspect(const QString &settingsKey = QString());
~BaseBoolAspect() override;
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
bool value() const;
void setValue(bool val);
@@ -76,7 +76,7 @@ public:
BaseSelectionAspect();
~BaseSelectionAspect() override;
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
int value() const;
void setValue(int val);
@@ -101,7 +101,7 @@ public:
BaseStringAspect();
~BaseStringAspect() override;
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
QString value() const;
void setValue(const QString &val);
@@ -150,7 +150,7 @@ public:
BaseIntegerAspect();
~BaseIntegerAspect() override;
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
qint64 value() const;
void setValue(qint64 val);
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index 2c2394c7e3..903c6f878a 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -248,13 +248,14 @@ QString RunConfiguration::disabledReason() const
QWidget *RunConfiguration::createConfigurationWidget()
{
auto widget = new QWidget;
- auto formLayout = new QFormLayout(widget);
- formLayout->setContentsMargins(0, 0, 0, 0);
- formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
-
- for (ProjectConfigurationAspect *aspect : m_aspects) {
- if (aspect->isVisible())
- aspect->addToConfigurationLayout(formLayout);
+ {
+ LayoutBuilder builder(widget);
+ for (ProjectConfigurationAspect *aspect : m_aspects) {
+ if (aspect->isVisible()) {
+ builder.startNewRow();
+ aspect->addToLayout(builder);
+ }
+ }
}
Core::VariableChooser::addSupportForChildWidgets(widget, macroExpander());
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp
index 0358dd54a5..c453bb55b6 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp
@@ -63,12 +63,13 @@ TerminalAspect::TerminalAspect()
this, &TerminalAspect::calculateUseTerminal);
}
-void TerminalAspect::addToConfigurationLayout(QFormLayout *layout)
+void TerminalAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!m_checkBox);
- m_checkBox = new QCheckBox(tr("Run in terminal"), layout->parentWidget());
+ m_checkBox = new QCheckBox(tr("Run in terminal"));
m_checkBox->setChecked(m_useTerminal);
- layout->addRow(QString(), m_checkBox);
+ builder.addItem(QString());
+ builder.addItem(m_checkBox.data());
connect(m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
m_userSet = true;
m_useTerminal = m_checkBox->isChecked();
@@ -140,10 +141,10 @@ WorkingDirectoryAspect::WorkingDirectoryAspect()
setSettingsKey("RunConfiguration.WorkingDirectory");
}
-void WorkingDirectoryAspect::addToConfigurationLayout(QFormLayout *layout)
+void WorkingDirectoryAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!m_chooser);
- m_chooser = new PathChooser(layout->parentWidget());
+ m_chooser = new PathChooser;
m_chooser->setHistoryCompleter(settingsKey());
m_chooser->setExpectedKind(Utils::PathChooser::Directory);
m_chooser->setPromptDialogTitle(tr("Select Working Directory"));
@@ -155,7 +156,7 @@ void WorkingDirectoryAspect::addToConfigurationLayout(QFormLayout *layout)
m_resetButton->setEnabled(m_workingDirectory != m_defaultWorkingDirectory);
});
- m_resetButton = new QToolButton(layout->parentWidget());
+ m_resetButton = new QToolButton;
m_resetButton->setToolTip(tr("Reset to Default"));
m_resetButton->setIcon(Utils::Icons::RESET.icon());
connect(m_resetButton.data(), &QAbstractButton::clicked, this, &WorkingDirectoryAspect::resetPath);
@@ -168,10 +169,9 @@ void WorkingDirectoryAspect::addToConfigurationLayout(QFormLayout *layout)
m_chooser->setEnvironment(m_envAspect->environment());
}
- auto hbox = new QHBoxLayout;
- hbox->addWidget(m_chooser);
- hbox->addWidget(m_resetButton);
- layout->addRow(tr("Working directory:"), hbox);
+ builder.addItem(tr("Working directory:"));
+ builder.addItem(m_chooser.data());
+ builder.addItem(m_resetButton.data());
}
void WorkingDirectoryAspect::acquaintSiblings(const ProjectConfigurationAspects &siblings)
@@ -337,9 +337,10 @@ QWidget *ArgumentsAspect::setupChooser()
return m_chooser.data();
}
-void ArgumentsAspect::addToConfigurationLayout(QFormLayout *layout)
+void ArgumentsAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!m_chooser && !m_multiLineChooser && !m_multiLineButton);
+ builder.addItem(tr("Command line arguments:"));
const auto container = new QWidget;
const auto containerLayout = new QHBoxLayout(container);
@@ -371,7 +372,8 @@ void ArgumentsAspect::addToConfigurationLayout(QFormLayout *layout)
});
containerLayout->addWidget(m_multiLineButton);
containerLayout->setAlignment(m_multiLineButton, Qt::AlignTop);
- layout->addRow(tr("Command line arguments:"), container);
+
+ builder.addItem(container);
}
/*!
@@ -450,11 +452,13 @@ FilePath ExecutableAspect::executable() const
return m_executable.filePath();
}
-void ExecutableAspect::addToConfigurationLayout(QFormLayout *layout)
+void ExecutableAspect::addToLayout(LayoutBuilder &builder)
{
- m_executable.addToConfigurationLayout(layout);
- if (m_alternativeExecutable)
- m_alternativeExecutable->addToConfigurationLayout(layout);
+ m_executable.addToLayout(builder);
+ if (m_alternativeExecutable) {
+ builder.startNewRow();
+ m_alternativeExecutable->addToLayout(builder);
+ }
}
void ExecutableAspect::setLabelText(const QString &labelText)
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.h b/src/plugins/projectexplorer/runconfigurationaspects.h
index 2b65737789..ca41d04df8 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.h
+++ b/src/plugins/projectexplorer/runconfigurationaspects.h
@@ -48,7 +48,7 @@ class PROJECTEXPLORER_EXPORT TerminalAspect : public ProjectConfigurationAspect
public:
TerminalAspect();
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
bool useTerminal() const;
void setUseTerminalHint(bool useTerminal);
@@ -74,7 +74,7 @@ class PROJECTEXPLORER_EXPORT WorkingDirectoryAspect : public ProjectConfiguratio
public:
WorkingDirectoryAspect();
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
void acquaintSiblings(const ProjectConfigurationAspects &) override;
Utils::FilePath workingDirectory(const Utils::MacroExpander *expander) const;
@@ -104,7 +104,7 @@ class PROJECTEXPLORER_EXPORT ArgumentsAspect : public ProjectConfigurationAspect
public:
ArgumentsAspect();
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
QString arguments(const Utils::MacroExpander *expander) const;
QString unexpandedArguments() const;
@@ -157,7 +157,7 @@ public:
void setSettingsKey(const QString &key);
void makeOverridable(const QString &overridingKey, const QString &useOverridableKey);
- void addToConfigurationLayout(QFormLayout *layout) override;
+ void addToLayout(LayoutBuilder &builder) override;
void setLabelText(const QString &labelText);
void setPlaceHolderText(const QString &placeHolderText);
void setExecutablePathStyle(Utils::OsType osType);