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