diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index 95fc5e09492..909508b91a1 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -469,6 +470,8 @@ LayoutBuilder::AlignAsFormLabel::AlignAsFormLabel(const LayoutItem &item) namespace Layouting { +// "Widgets" + Group::Group(const LayoutBuilder &innerLayout) : Group({}, innerLayout) {} @@ -481,6 +484,15 @@ Group::Group(const LayoutBuilder::Setters &setters, const LayoutBuilder &innerLa func(widget); } +PushButton::PushButton(std::initializer_list setters) +{ + widget = new QPushButton; + for (const LayoutBuilder::Setter &func : setters) + func(widget); +} + +// "Properties" + LayoutBuilder::Setter title(const QString &title, BoolAspect *checker) { return [title, checker](QObject *target) { @@ -498,6 +510,39 @@ LayoutBuilder::Setter title(const QString &title, BoolAspect *checker) }; } +LayoutBuilder::Setter 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); + } + }; +} + +LayoutBuilder::Setter text(const QString &text) +{ + return [text](QObject *target) { + if (auto button = qobject_cast(target)) { + button->setText(text); + } else { + QTC_CHECK(false); + } + }; +} + +LayoutBuilder::Setter tooltip(const QString &toolTip) +{ + return [toolTip](QObject *target) { + if (auto widget = qobject_cast(target)) { + widget->setToolTip(toolTip); + } else { + QTC_CHECK(false); + } + }; +} + LayoutBuilder::Break br; LayoutBuilder::Stretch st; LayoutBuilder::Space empty(0); diff --git a/src/libs/utils/layoutbuilder.h b/src/libs/utils/layoutbuilder.h index 3581cd78edd..e0eea466c79 100644 --- a/src/libs/utils/layoutbuilder.h +++ b/src/libs/utils/layoutbuilder.h @@ -188,6 +188,11 @@ namespace Layouting { QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter title(const QString &title, BoolAspect *checker = nullptr); +QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter text(const QString &text); +QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter tooltip(const QString &toolTip); +QTCREATOR_UTILS_EXPORT LayoutBuilder::Setter onClicked(const std::function &func, + QObject *guard = nullptr); + class QTCREATOR_UTILS_EXPORT Group : public LayoutBuilder::LayoutItem { public: @@ -195,6 +200,12 @@ public: Group(const LayoutBuilder::Setters &setters, const LayoutBuilder &innerLayout); }; +class QTCREATOR_UTILS_EXPORT PushButton : public LayoutBuilder::LayoutItem +{ +public: + PushButton(std::initializer_list setters); +}; + class QTCREATOR_UTILS_EXPORT Column : public LayoutBuilder { public: diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp index 6abb3e7870f..a499af97ef5 100644 --- a/src/plugins/autotest/testsettingspage.cpp +++ b/src/plugins/autotest/testsettingspage.cpp @@ -157,10 +157,6 @@ TestSettingsWidget::TestSettingsWidget(QWidget *parent) Tr::tr("Timeout used when executing test cases. This will apply " "for each test case on its own, not the whole project.")); - auto resetChoicesButton = new QPushButton(Tr::tr("Reset Cached Choices")); - resetChoicesButton->setToolTip( - Tr::tr("Clear all cached choices of run configurations for tests where the executable could not be deduced.")); - m_frameworkTreeWidget = new QTreeWidget; m_frameworkTreeWidget->setRootIsDecorated(false); m_frameworkTreeWidget->setHeaderHidden(false); @@ -181,6 +177,13 @@ TestSettingsWidget::TestSettingsWidget(QWidget *parent) using namespace Utils::Layouting; + PushButton resetChoicesButton { + text(Tr::tr("Reset Cached Choices")), + tooltip(Tr::tr("Clear all cached choices of run configurations for " + "tests where the executable could not be deduced.")), + onClicked([] { AutotestPlugin::clearChoiceCache(); }, this) + }; + Group generalGroup { title(Tr::tr("General")), Column { @@ -218,8 +221,6 @@ TestSettingsWidget::TestSettingsWidget(QWidget *parent) connect(m_frameworkTreeWidget, &QTreeWidget::itemChanged, this, &TestSettingsWidget::onFrameworkItemChanged); - connect(resetChoicesButton, &QPushButton::clicked, - this, [] { AutotestPlugin::clearChoiceCache(); }); connect(m_openResultsOnFinishCB, &QCheckBox::toggled, m_openResultsOnFailCB, &QCheckBox::setEnabled); connect(m_limitResultDescriptionCb, &QCheckBox::toggled,