Utils: Make Layouting::Group { .. } less weird

It had a implicit vertical layout leading to unneded layout nesting
in quite a few cases. The price is an added Column { ... } in those
places where the implicit vertical layout was sufficient before.

Change-Id: I3ae1f03f9c1d691bd0c563b0447edd03ee02bbd2
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2022-07-21 11:10:34 +02:00
parent dcb9cd9062
commit b8a6d72137
19 changed files with 147 additions and 109 deletions

View File

@@ -25,7 +25,6 @@
#include "layoutbuilder.h" #include "layoutbuilder.h"
#include "algorithm.h"
#include "aspects.h" #include "aspects.h"
#include "qtcassert.h" #include "qtcassert.h"
@@ -287,7 +286,6 @@ LayoutBuilder::LayoutItem::LayoutItem(const LayoutBuilder &builder)
{ {
layout = builder.createLayout(); layout = builder.createLayout();
doLayoutHelper(layout, builder.m_items); doLayoutHelper(layout, builder.m_items);
setMargins(builder.m_withMargins, layout);
} }
/*! /*!
@@ -386,13 +384,13 @@ LayoutBuilder &LayoutBuilder::addItem(const LayoutItem &item)
return *this; return *this;
} }
void LayoutBuilder::doLayout(QWidget *parent) void LayoutBuilder::doLayout(QWidget *parent, bool withMargins) const
{ {
QLayout *layout = createLayout(); QLayout *layout = createLayout();
parent->setLayout(layout); parent->setLayout(layout);
doLayoutHelper(layout, m_items); doLayoutHelper(layout, m_items);
setMargins(m_withMargins, layout); setMargins(withMargins, layout);
} }
/*! /*!
@@ -410,17 +408,15 @@ LayoutBuilder &LayoutBuilder::addItems(const LayoutItems &items)
This operation can only be performed once per LayoutBuilder instance. This operation can only be performed once per LayoutBuilder instance.
*/ */
void LayoutBuilder::attachTo(QWidget *w, bool withMargins) void LayoutBuilder::attachTo(QWidget *w, bool withMargins) const
{ {
m_withMargins = withMargins; doLayout(w, withMargins);
doLayout(w);
} }
QWidget *LayoutBuilder::emerge(bool withMargins) QWidget *LayoutBuilder::emerge(bool withMargins)
{ {
m_withMargins = withMargins;
auto w = new QWidget; auto w = new QWidget;
doLayout(w); doLayout(w, withMargins);
return w; return w;
} }
@@ -485,25 +481,23 @@ LayoutBuilder::AlignAsFormLabel::AlignAsFormLabel(const LayoutItem &item)
namespace Layouting { namespace Layouting {
Group::Group(std::initializer_list<LayoutItem> items) Group::Group(const LayoutBuilder &innerLayout)
: Group(Title({}), innerLayout)
{}
Group::Group(const LayoutBuilder::Title &title, const LayoutBuilder &innerLayout)
{ {
auto box = new QGroupBox; auto box = new QGroupBox;
Column builder;
bool innerMargins = true; box->setTitle(title.specialValue.toString());
for (const LayoutItem &item : items) { box->setObjectName(title.specialValue.toString());
if (item.specialType == LayoutBuilder::SpecialType::Title) { if (auto check = qobject_cast<BoolAspect *>(title.aspect)) {
box->setTitle(item.specialValue.toString());
box->setObjectName(item.specialValue.toString());
if (auto check = qobject_cast<BoolAspect *>(item.aspect)) {
box->setCheckable(true); box->setCheckable(true);
box->setChecked(check->value()); box->setChecked(check->value());
check->setHandlesGroup(box); check->setHandlesGroup(box);
} }
} else {
builder.addItem(item); innerLayout.attachTo(box, true);
}
}
builder.attachTo(box, innerMargins);
widget = box; widget = box;
} }

View File

@@ -110,7 +110,7 @@ public:
LayoutType layoutType() const { return m_layoutType; } LayoutType layoutType() const { return m_layoutType; }
void attachTo(QWidget *w, bool withMargins = true); void attachTo(QWidget *w, bool withMargins = true) const;
QWidget *emerge(bool withMargins = true); QWidget *emerge(bool withMargins = true);
class QTCREATOR_UTILS_EXPORT Space : public LayoutItem class QTCREATOR_UTILS_EXPORT Space : public LayoutItem
@@ -153,12 +153,11 @@ protected:
explicit LayoutBuilder(); // Adds to existing layout. explicit LayoutBuilder(); // Adds to existing layout.
QLayout *createLayout() const; QLayout *createLayout() const;
void doLayout(QWidget *parent); void doLayout(QWidget *parent, bool withMargins) const;
LayoutItems m_items; LayoutItems m_items;
LayoutType m_layoutType; LayoutType m_layoutType;
Utils::optional<int> m_spacing; Utils::optional<int> m_spacing;
bool m_withMargins = false;
}; };
class QTCREATOR_UTILS_EXPORT LayoutExtender : public LayoutBuilder class QTCREATOR_UTILS_EXPORT LayoutExtender : public LayoutBuilder
@@ -176,7 +175,8 @@ namespace Layouting {
class QTCREATOR_UTILS_EXPORT Group : public LayoutBuilder::LayoutItem class QTCREATOR_UTILS_EXPORT Group : public LayoutBuilder::LayoutItem
{ {
public: public:
Group(std::initializer_list<LayoutBuilder::LayoutItem> items); explicit Group(const LayoutBuilder &innerLayout);
Group(const LayoutBuilder::Title &title, const LayoutBuilder &innerLayout);
}; };
class QTCREATOR_UTILS_EXPORT Column : public LayoutBuilder class QTCREATOR_UTILS_EXPORT Column : public LayoutBuilder

View File

@@ -155,14 +155,16 @@ CTestSettingsPage::CTestSettingsPage(CTestSettings *settings, Utils::Id settings
Row {s.stopOnFailure}, nl, Row {s.stopOnFailure}, nl,
Row {s.outputMode}, nl, Row {s.outputMode}, nl,
Group { Group {
Title(tr("Repeat tests"), &s.repeat), nl, Title(tr("Repeat tests"), &s.repeat),
Row {s.repetitionMode, s.repetitionCount}, Row {s.repetitionMode, s.repetitionCount},
}, nl, }, nl,
Group { Group {
Title(tr("Run in parallel"), &s.parallel), nl, Title(tr("Run in parallel"), &s.parallel),
Column {
Row {s.jobs}, nl, Row {s.jobs}, nl,
Row {s.testLoad, s.threshold} Row {s.testLoad, s.threshold}
} }
}
}; };
Column {Row {Column { form , Stretch() }, Stretch() } }.attachTo(widget); Column {Row {Column { form , Stretch() }, Stretch() } }.attachTo(widget);

View File

@@ -134,7 +134,7 @@ QtTestSettingsPage::QtTestSettingsPage(QtTestSettings *settings, Id settingsId)
}, },
Group { Group {
Title(QtTestSettings::tr("Benchmark Metrics")), Title(QtTestSettings::tr("Benchmark Metrics")),
s.metrics Column { s.metrics }
}, },
}; };

View File

@@ -347,6 +347,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
Column { Column {
m_configurationStates, m_configurationStates,
Group { Group {
Column {
cmakeConfiguration, cmakeConfiguration,
Row { Row {
bc->aspect<InitialCMakeArgumentsAspect>(), bc->aspect<InitialCMakeArgumentsAspect>(),
@@ -354,6 +355,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) :
}, },
m_reconfigureButton, m_reconfigureButton,
} }
}
}.setSpacing(0) }.setSpacing(0)
}.attachTo(details, false); }.attachTo(details, false);

View File

@@ -97,7 +97,7 @@ CMakeSpecificSettingsPage::CMakeSpecificSettingsPage(CMakeSpecificSettings *sett
Column { Column {
Group { Group {
Title(::CMakeProjectManager::Internal::CMakeSpecificSettings::tr("Adding Files")), Title(::CMakeProjectManager::Internal::CMakeSpecificSettings::tr("Adding Files")),
s.afterAddFileSetting Column { s.afterAddFileSetting }
}, },
s.packageManagerAutoSetup, s.packageManagerAutoSetup,
s.askBeforeReConfigureInitialParams, s.askBeforeReConfigureInitialParams,

View File

@@ -207,7 +207,12 @@ public:
form.addRow(Span(3, Row{m_clearCrashReportsButton, m_crashReportsSizeText, Stretch()})); form.addRow(Span(3, Row{m_clearCrashReportsButton, m_crashReportsSizeText, Stretch()}));
#endif #endif
Column{Group{Title(tr("System")), form, Stretch()}}.attachTo(this); Column {
Group {
Title(tr("System")),
Column { form, Stretch() }
}
}.attachTo(this);
m_reloadBehavior->setCurrentIndex(EditorManager::reloadSetting()); m_reloadBehavior->setCurrentIndex(EditorManager::reloadSetting());
if (HostOsInfo::isAnyUnixHost()) { if (HostOsInfo::isAnyUnixHost()) {

View File

@@ -112,12 +112,14 @@ CvsSettingsPage::CvsSettingsPage(CvsSettings *settings)
}, },
Group { Group {
Title(CvsSettings::tr("Miscellaneous")), Title(CvsSettings::tr("Miscellaneous")),
Column {
Form { Form {
s.timeout, s.timeout,
s.diffOptions, s.diffOptions,
}, },
s.promptOnSubmit, s.promptOnSubmit,
s.describeByCommitId, s.describeByCommitId,
}
}, },
Stretch() Stretch()
}.attachTo(widget); }.attachTo(widget);

View File

@@ -199,29 +199,35 @@ CdbOptionsPageWidget::CdbOptionsPageWidget()
Row { Row {
Group { Group {
Title(Tr::tr("Startup")), Title(Tr::tr("Startup")),
Column {
s.cdbAdditionalArguments, s.cdbAdditionalArguments,
s.useCdbConsole, s.useCdbConsole,
Stretch() Stretch()
}
}, },
Group { Group {
Title(Tr::tr("Various")), Title(Tr::tr("Various")),
Column {
s.ignoreFirstChanceAccessViolation, s.ignoreFirstChanceAccessViolation,
s.cdbBreakOnCrtDbgReport, s.cdbBreakOnCrtDbgReport,
s.cdbBreakPointCorrection, s.cdbBreakPointCorrection,
s.cdbUsePythonDumper s.cdbUsePythonDumper
} }
}
}, },
Group { Group {
Title(Tr::tr("Break On")), Title(Tr::tr("Break On")),
m_breakEventWidget Column { m_breakEventWidget }
}, },
Group { Group {
Title(Tr::tr("Add Exceptions to Issues View")), Title(Tr::tr("Add Exceptions to Issues View")),
Column {
s.firstChanceExceptionTaskEntry, s.firstChanceExceptionTaskEntry,
s.secondChanceExceptionTaskEntry s.secondChanceExceptionTaskEntry
}
}, },
Stretch() Stretch()
@@ -275,8 +281,8 @@ CdbPathsPageWidget::CdbPathsPageWidget()
finish(); finish();
Column { Column {
Group { Title(Tr::tr("Symbol Paths")), m_symbolPaths }, Group { Title(Tr::tr("Symbol Paths")), Column { m_symbolPaths } },
Group { Title(Tr::tr("Source Paths")), m_sourcePaths }, Group { Title(Tr::tr("Source Paths")), Column { m_sourcePaths } },
Stretch() Stretch()
}.attachTo(this); }.attachTo(this);
} }

View File

@@ -160,13 +160,16 @@ public:
label, label,
s.useCodeModel, s.useCodeModel,
s.showThreadNames, s.showThreadNames,
Group { Title(Tr::tr("Extra Debugging Helper")), s.extraDumperFile } Group { Title(Tr::tr("Extra Debugging Helper")), Column { s.extraDumperFile } }
}; };
Group useHelper { Group useHelper {
Row { Row {
left, left,
Group { Title(Tr::tr("Debugging Helper Customization")), s.extraDumperCommands } Group {
Title(Tr::tr("Debugging Helper Customization")),
Column { s.extraDumperCommands }
}
} }
}; };

View File

@@ -60,6 +60,7 @@ public:
Group general { Group general {
Title { Tr::tr("General") }, Title { Tr::tr("General") },
Column {
Row { s.gdbWatchdogTimeout, Stretch() }, Row { s.gdbWatchdogTimeout, Stretch() },
s.skipKnownFrames, s.skipKnownFrames,
s.useMessageBoxForSignals, s.useMessageBoxForSignals,
@@ -71,11 +72,18 @@ public:
s.usePseudoTracepoints, s.usePseudoTracepoints,
s.useIndexCache, s.useIndexCache,
Stretch() Stretch()
}
}; };
Column commands { Column commands {
Group { Title { Tr::tr("Additional Startup Commands") }, s.gdbStartupCommands }, Group {
Group { Title { Tr::tr("Additional Attach Commands") }, s.gdbPostAttachCommands }, Title { Tr::tr("Additional Startup Commands") },
Column { s.gdbStartupCommands }
},
Group {
Title { Tr::tr("Additional Attach Commands") },
Column { s.gdbPostAttachCommands },
},
Stretch() Stretch()
}; };
@@ -112,6 +120,7 @@ public:
Group extended { Group extended {
Title(Tr::tr("Extended")), Title(Tr::tr("Extended")),
Column {
labelDangerous, labelDangerous,
s.targetAsync, s.targetAsync,
s.autoEnrichParameters, s.autoEnrichParameters,
@@ -120,6 +129,7 @@ public:
s.breakOnAbort, s.breakOnAbort,
s.enableReverseDebugging, s.enableReverseDebugging,
s.multiInferior, s.multiInferior,
}
}; };
Column { extended, Stretch() }.attachTo(w); Column { extended, Stretch() }.attachTo(w);

View File

@@ -429,18 +429,22 @@ void FakeVimOptionPage::layoutPage(QWidget *widget)
Group { Group {
Title(Tr::tr("Vim Behavior")), Title(Tr::tr("Vim Behavior")),
Column {
bools, bools,
ints, ints,
strings strings
}
}, },
Group { Group {
Title(Tr::tr("Plugin Emulation")), Title(Tr::tr("Plugin Emulation")),
Column {
s.emulateVimCommentary, s.emulateVimCommentary,
s.emulateReplaceWithRegister, s.emulateReplaceWithRegister,
s.emulateArgTextObj, s.emulateArgTextObj,
s.emulateExchange, s.emulateExchange,
s.emulateSurround s.emulateSurround
}
}, },
Row { copyTextEditorSettings, setQtStyle, setPlainStyle, Stretch() }, Row { copyTextEditorSettings, setQtStyle, setPlainStyle, Stretch() },

View File

@@ -170,14 +170,18 @@ GitSettingsPage::GitSettingsPage(GitSettings *settings)
Column { Column {
Group { Group {
Title(GitSettings::tr("Configuration")), Title(GitSettings::tr("Configuration")),
Column {
Row { s.path }, Row { s.path },
s.winSetHomeEnvironment, s.winSetHomeEnvironment,
}
}, },
Group { Group {
Title(GitSettings::tr("Miscellaneous")), Title(GitSettings::tr("Miscellaneous")),
Column {
Row { s.logCount, s.timeout, Stretch() }, Row { s.logCount, s.timeout, Stretch() },
s.pullRebase s.pullRebase
}
}, },
Group { Group {

View File

@@ -148,7 +148,7 @@ GitLabOptionsWidget::GitLabOptionsWidget(QWidget *parent)
Grid { Grid {
Form { Form {
defaultLabel, m_defaultGitLabServer, nl, defaultLabel, m_defaultGitLabServer, nl,
Row { Group { m_gitLabServerWidget, Space(1) } }, nl, Row { Group { Column { m_gitLabServerWidget, Space(1) } } }, nl,
m_curl, nl, m_curl, nl,
}, Column { m_add, m_edit, m_remove, Stretch() }, }, Column { m_add, m_edit, m_remove, Stretch() },
}.attachTo(this); }.attachTo(this);

View File

@@ -143,7 +143,7 @@ NimToolsSettingsPage::NimToolsSettingsPage(NimSettings *settings)
Column { Column {
Group { Group {
Title("Nimsuggest"), Title("Nimsuggest"),
settings->nimSuggestPath Column { settings->nimSuggestPath }
}, },
Stretch() Stretch()
}.attachTo(widget); }.attachTo(widget);

View File

@@ -277,9 +277,11 @@ PerforceSettingsPage::PerforceSettingsPage(PerforceSettings *settings)
Group misc { Group misc {
Title(PerforceSettings::tr("Miscellaneous")), Title(PerforceSettings::tr("Miscellaneous")),
Column {
Row { s.logCount, s.timeOutS, Stretch() }, Row { s.logCount, s.timeOutS, Stretch() },
s.promptToSubmit, s.promptToSubmit,
s.autoOpen s.autoOpen
}
}; };
Column { Column {

View File

@@ -122,7 +122,7 @@ SubversionSettingsPage::SubversionSettingsPage(SubversionSettings *settings)
Column { Column {
Group { Group {
Title(SubversionSettings::tr("Configuration")), Title(SubversionSettings::tr("Configuration")),
s.binaryPath Column { s.binaryPath }
}, },
Group { Group {
@@ -135,9 +135,11 @@ SubversionSettingsPage::SubversionSettingsPage(SubversionSettings *settings)
Group { Group {
Title(SubversionSettings::tr("Miscellaneous")), Title(SubversionSettings::tr("Miscellaneous")),
Column {
Row { s.logCount, s.timeout, Stretch() }, Row { s.logCount, s.timeout, Stretch() },
s.promptOnSubmit, s.promptOnSubmit,
s.spaceIgnorantAnnotation, s.spaceIgnorantAnnotation,
}
}, },
Stretch() Stretch()

View File

@@ -81,7 +81,7 @@ KeywordDialog::KeywordDialog(const Keyword &keyword, const QSet<QString> &alread
}, },
Group { Group {
Title(Tr::tr("Keyword")), Title(Tr::tr("Keyword")),
m_keywordNameEdit Column { m_keywordNameEdit }
} }
}, },
m_errorLabel, m_errorLabel,

View File

@@ -89,12 +89,14 @@ ValgrindConfigWidget::ValgrindConfigWidget(ValgrindBaseSettings *settings)
Span { Span {
2, 2,
Group { Group {
Column {
s.enableCacheSim, s.enableCacheSim,
s.enableBranchSim, s.enableBranchSim,
s.collectSystime, s.collectSystime,
s.collectBusEvents, s.collectBusEvents,
} }
} }
}
}; };
Column { Column {