From 3c9aa364ecf2a6625405f77a6e24fe57734e5b9c Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 10 Aug 2022 17:13:21 +0200 Subject: [PATCH] Utils: Make LayoutBuilder::Setter a LayoutItem Weird, but makes GroupBox implementation less special and allows several setters without resorting to using extra {...} there, which would be needed e.g. for title _and_ toolTip. Change-Id: Ie0e64a7bae15825292a473a1e973817be5c27fc4 Reviewed-by: Eike Ziller Reviewed-by: Reviewed-by: Qt CI Bot --- src/libs/utils/layoutbuilder.cpp | 32 ++++++++++++++++++++------------ src/libs/utils/layoutbuilder.h | 22 ++++++---------------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index 2a56e10d213..604ad6af57c 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -467,23 +467,31 @@ namespace Layouting { // "Widgets" -Group::Group(const LayoutBuilder &innerLayout) - : Group({}, innerLayout) -{} - -Group::Group(const LayoutBuilder::Setters &setters, const LayoutBuilder &innerLayout) +static void applyItems(QWidget *widget, const QList &items) { - widget = new QGroupBox; - innerLayout.attachTo(widget, AttachType::WithMargins); - for (const LayoutBuilder::Setter &func : setters) - func(widget); + bool hadLayout = false; + for (const LayoutBuilder::LayoutItem &item : items) { + if (item.setter) { + item.setter(widget); + } else if (item.layout && !hadLayout) { + hadLayout = true; + widget->setLayout(item.layout); + } else { + QTC_CHECK(false); + } + } } -PushButton::PushButton(std::initializer_list setters) +Group::Group(std::initializer_list items) +{ + widget = new QGroupBox; + applyItems(widget, items); +} + +PushButton::PushButton(std::initializer_list items) { widget = new QPushButton; - for (const LayoutBuilder::Setter &func : setters) - func(widget); + applyItems(widget, items); } // "Properties" diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index b4ee1928d38..887eb7e4c13 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -75,7 +75,7 @@ public: Break, }; - using Modifier = std::function; + using Setter = std::function; class QTCREATOR_UTILS_EXPORT LayoutItem { @@ -87,6 +87,7 @@ public: LayoutItem(BaseAspect &aspect); LayoutItem(const QString &text); LayoutItem(const LayoutBuilder &builder); + LayoutItem(const Setter &setter) { this->setter = setter; } QLayout *layout = nullptr; QWidget *widget = nullptr; @@ -94,6 +95,8 @@ public: QString text; // FIXME: Use specialValue for that int span = 1; + AlignmentType align = AlignmentType::DefaultAlignment; + Setter setter; SpecialType specialType = SpecialType::NotSpecial; QVariant specialValue; }; @@ -147,15 +150,6 @@ public: Break(); }; - using Setter = std::function; - - class QTCREATOR_UTILS_EXPORT Setters : public std::vector - { - public: - using std::vector::vector; - Setters(const Setter &setter) { push_back(setter); } - }; - protected: explicit LayoutBuilder(); // Adds to existing layout. @@ -191,14 +185,13 @@ QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter onClicked(const std::function items); }; class QTCREATOR_UTILS_EXPORT PushButton : public LayoutBuilder::LayoutItem { public: - PushButton(std::initializer_list setters); + PushButton(std::initializer_list items); }; class QTCREATOR_UTILS_EXPORT Column : public LayoutBuilder @@ -232,9 +225,6 @@ public: using Space = LayoutBuilder::Space; using Span = LayoutBuilder::Span; -using Stretch = LayoutBuilder::Stretch; // FIXME: Remove -using Break = LayoutBuilder::Break; // FIXME: Remove - QTCREATOR_UTILS_EXPORT extern LayoutBuilder::Break br; QTCREATOR_UTILS_EXPORT extern LayoutBuilder::Stretch st; QTCREATOR_UTILS_EXPORT extern LayoutBuilder::Space empty;