From 63ad450f9b83c7ccbd26f07a171ccce4b51b4973 Mon Sep 17 00:00:00 2001 From: Nicolas Niclausse <Nicolas.Niclausse@inria.fr> Date: Mon, 10 May 2021 20:49:06 +0200 Subject: [PATCH] add the possibility of overriding textOn and textOff for dtkWidgetsParameterBoolPushButton --- exp/dtkWidgetsMenu/parameters_menu.json | 10 ++-------- .../dtkWidgetsParameterBoolPushButton.cpp | 17 +++++++++++++++-- .../dtkWidgetsParameterBoolPushButton.h | 2 ++ .../dtkWidgetsParameterMenuBarGenerator.cpp | 10 ++++++++++ 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/exp/dtkWidgetsMenu/parameters_menu.json b/exp/dtkWidgetsMenu/parameters_menu.json index 824dd7b..b7761c7 100644 --- a/exp/dtkWidgetsMenu/parameters_menu.json +++ b/exp/dtkWidgetsMenu/parameters_menu.json @@ -43,14 +43,6 @@ "widget_read_only": true } }, - { - "parameter": { - "widget": "dtkWidgetsParameterBoolPushButton", - "uid": "push_button_ro", - "advanced": false, - "widget_read_only": true - } - }, { "parameter": { "widget": "dtkWidgetsParameterFileBrowse", @@ -153,6 +145,8 @@ "widget": "dtkWidgetsParameterBoolPushButton", "uid": "push_button", "advanced": false, + "textOn": "Nobody expects the spanish inquisition!", + "textOff": "Hit me", "widget_read_only": false } }, diff --git a/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.cpp b/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.cpp index 8e42e0b..43c7458 100644 --- a/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.cpp +++ b/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.cpp @@ -26,6 +26,8 @@ public: QPushButton *push_button = nullptr; bool running = false; + QString on_text = "Running ..."; + QString off_text = "Run"; }; // /////////////////////////////////////////////////////////////////// @@ -47,6 +49,17 @@ dtkWidgetsParameterBoolPushButton::~dtkWidgetsParameterBoolPushButton(void) delete d; } +void dtkWidgetsParameterBoolPushButton::setOnText(const QString & text) +{ + d->on_text = text; +} + +void dtkWidgetsParameterBoolPushButton::setOffText(const QString & text) +{ + d->off_text = text; + d->push_button->setText(d->off_text); +} + void dtkWidgetsParameterBoolPushButton::setReadOnly(bool val) { this->dtkWidgetsParameter::m_readonly = val; @@ -79,10 +92,10 @@ bool dtkWidgetsParameterBoolPushButton::connect(dtkCoreParameter *p) auto setAppearance = [this] (bool state) { if (state) { this->d->push_button->setStyleSheet("background-color: red"); - this->d->push_button->setText("Running..."); + this->d->push_button->setText(d->on_text); } else { this->d->push_button->setStyleSheet(""); - this->d->push_button->setText("Run"); + this->d->push_button->setText(d->off_text); } }; diff --git a/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.h b/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.h index 2bc9283..9a188a5 100644 --- a/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.h +++ b/src/dtkWidgets/dtkWidgetsParameterBoolPushButton.h @@ -31,6 +31,8 @@ public: public: bool connect(dtkCoreParameter *) override; void setReadOnly(bool) override; + void setOnText(const QString&); + void setOffText(const QString&); private: using dtkWidgetsParameterBase<dtk::d_bool>::m_parameter; diff --git a/src/dtkWidgets/dtkWidgetsParameterMenuBarGenerator.cpp b/src/dtkWidgets/dtkWidgetsParameterMenuBarGenerator.cpp index 1682238..62fe4d0 100644 --- a/src/dtkWidgets/dtkWidgetsParameterMenuBarGenerator.cpp +++ b/src/dtkWidgets/dtkWidgetsParameterMenuBarGenerator.cpp @@ -14,6 +14,7 @@ #include "dtkWidgetsParameterMenuBarGenerator.h" +#include "dtkWidgetsParameterBoolPushButton.h" #include "dtkWidgetsParameterFactory.h" #include "dtkWidgetsParameter.h" #include "dtkWidgetsMenu.h" @@ -107,6 +108,15 @@ void dtkWidgetsParameterMenuBarGeneratorPrivate::parseParameter(dtkWidgetsMenu * if(parameter_object.contains("widget_read_only")) { param_widget->setReadOnly(parameter_object["widget_read_only"].toBool()); } + auto bool_widget = dynamic_cast<dtkWidgetsParameterBoolPushButton*>(param_widget); + if (bool_widget) { + if (parameter_object.contains("textOn")) { + bool_widget->setOnText(parameter_object["textOn"].toString()); + } + if (parameter_object.contains("textOff")) { + bool_widget->setOffText(parameter_object["textOff"].toString()); + } + } parameters_widgets[parameter_uid] = param_widget; } } -- GitLab