From 652e99830fe00e32b9ea774920a34fde7eb79698 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 4 May 2023 08:55:10 +0200 Subject: [PATCH] Layouting: Add some support for spin boxes Change-Id: I5eff963cf605f5239a96daee924e91b2c170f506 Reviewed-by: Alessandro Portale --- src/libs/utils/layoutbuilder.cpp | 55 +++++++++++++++++++++++++------- src/libs/utils/layoutbuilder.h | 13 ++++++++ 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index bda8bcab8e3..a4edf7dfabe 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -559,6 +560,12 @@ PushButton::PushButton(std::initializer_list items) setupWidget(this); } +SpinBox::SpinBox(std::initializer_list items) +{ + this->subItems = items; + setupWidget(this); +} + TextEdit::TextEdit(std::initializer_list items) { this->subItems = items; @@ -630,17 +637,6 @@ LayoutItem title(const QString &title) }; } -LayoutItem onClicked(const std::function &func, QObject *guard) -{ - return [func, guard](QObject *target) { - if (auto button = qobject_cast(target)) { - QObject::connect(button, &QAbstractButton::clicked, guard ? guard : target, func); - } else { - QTC_CHECK(false); - } - }; -} - LayoutItem text(const QString &text) { return [text](QObject *target) { @@ -698,6 +694,43 @@ LayoutItem columnStretch(int column, int stretch) }; } +// Signals + +LayoutItem onClicked(const std::function &func, QObject *guard) +{ + return [func, guard](QObject *target) { + if (auto button = qobject_cast(target)) { + QObject::connect(button, &QAbstractButton::clicked, guard ? guard : target, func); + } else { + QTC_CHECK(false); + } + }; +} + +LayoutItem onTextChanged(const std::function &func, QObject *guard) +{ + return [func, guard](QObject *target) { + if (auto button = qobject_cast(target)) { + QObject::connect(button, &QSpinBox::textChanged, guard ? guard : target, func); + } else { + QTC_CHECK(false); + } + }; +} + +LayoutItem onValueChanged(const std::function &func, QObject *guard) +{ + return [func, guard](QObject *target) { + if (auto button = qobject_cast(target)) { + QObject::connect(button, &QSpinBox::valueChanged, guard ? guard : target, func); + } else { + QTC_CHECK(false); + } + }; +} + +// Convenience + QWidget *createHr(QWidget *parent) { auto frame = new QFrame(parent); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index f2efeaf2fe9..cac9fad372d 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -143,6 +143,12 @@ public: PushButton(std::initializer_list items); }; +class QTCREATOR_UTILS_EXPORT SpinBox : public LayoutItem +{ +public: + SpinBox(std::initializer_list items); +}; + class QTCREATOR_UTILS_EXPORT Splitter : public LayoutItem { public: @@ -193,8 +199,15 @@ QTCREATOR_UTILS_EXPORT LayoutItem resize(int, int); QTCREATOR_UTILS_EXPORT LayoutItem columnStretch(int column, int stretch); QTCREATOR_UTILS_EXPORT LayoutItem spacing(int); QTCREATOR_UTILS_EXPORT LayoutItem windowTitle(const QString &windowTitle); + +// "Signals" + QTCREATOR_UTILS_EXPORT LayoutItem onClicked(const std::function &, QObject *guard = nullptr); +QTCREATOR_UTILS_EXPORT LayoutItem onTextChanged(const std::function &, + QObject *guard = nullptr); +QTCREATOR_UTILS_EXPORT LayoutItem onValueChanged(const std::function &, + QObject *guard = nullptr); // Convenience