changeset 28248:aee0f20c8029

Implement "gray" when uicontrol radiobutton/checkbox are disabled (bug #57128) * BaseControl.cc (updatePalette): Call setColor() with additional argument of "QPalette::Active" and again with "QPalette::Inactive" so that colors are set only for specific roles. * CheckBoxControl.h (CheckBoxControl): Declare new private member function update(). * CheckBoxControl.cc (CheckBoxControl): Check for "Enable" property value of "inactive" and call setCheckable (false) if found. * CheckBoxControl.cc (update): New function to intercept and handle change to "Enable" property before forwarding to BaseControl. * RadioButtonControl.cc (RadioButtonControl): Check for "Enable" property value of "inactive" and call setCheckable (false) if found. * RadioButtonControl.cc (update): New function to intercept and handle change to "Enable" property before forwarding to BaseControl.
author Rik <rik@octave.org>
date Sun, 26 Apr 2020 18:15:30 -0700
parents 20794455ea11
children be4a6f33d142
files libgui/graphics/BaseControl.cc libgui/graphics/CheckBoxControl.cc libgui/graphics/CheckBoxControl.h libgui/graphics/RadioButtonControl.cc libgui/graphics/RadioButtonControl.h
diffstat 5 files changed, 67 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/BaseControl.cc	Sun Apr 26 15:11:51 2020 -0700
+++ b/libgui/graphics/BaseControl.cc	Sun Apr 26 18:15:30 2020 -0700
@@ -74,9 +74,13 @@
     else if (props.style_is ("radiobutton")
              || props.style_is ("checkbox"))
       {
-        p.setColor (QPalette::Button,
+        p.setColor (QPalette::Active, QPalette::Button,
+                    Utils::fromRgb (props.get_backgroundcolor_rgb ()));
+        p.setColor (QPalette::Inactive, QPalette::Button,
                     Utils::fromRgb (props.get_backgroundcolor_rgb ()));
-        p.setColor (QPalette::WindowText,
+        p.setColor (QPalette::Active, QPalette::WindowText,
+                    Utils::fromRgb (props.get_foregroundcolor_rgb ()));
+        p.setColor (QPalette::Inactive, QPalette::WindowText,
                     Utils::fromRgb (props.get_foregroundcolor_rgb ()));
       }
     else if (props.style_is ("pushbutton")
--- a/libgui/graphics/CheckBoxControl.cc	Sun Apr 26 15:11:51 2020 -0700
+++ b/libgui/graphics/CheckBoxControl.cc	Sun Apr 26 18:15:30 2020 -0700
@@ -61,10 +61,37 @@
                                     const graphics_object& go, QCheckBox *box)
     : ButtonControl (oct_obj, interp, go, box)
   {
+    uicontrol::properties& up = properties<uicontrol> ();
+
     box->setAutoFillBackground (true);
+    if (up.enable_is ("inactive"))
+      box->setCheckable (false);
   }
 
   CheckBoxControl::~CheckBoxControl (void)
   { }
 
+  void
+  CheckBoxControl::update (int pId)
+  {
+    uicontrol::properties& up = properties<uicontrol> ();
+    QCheckBox *box = qWidget<QCheckBox> ();
+
+    switch (pId)
+      {
+      case uicontrol::properties::ID_ENABLE:
+        {
+          if (up.enable_is ("inactive"))
+            box->setCheckable (false);
+          else
+            box->setCheckable (true);
+          ButtonControl::update (pId);
+        }
+        break;
+
+      default:
+        ButtonControl::update (pId);
+        break;
+      }
+  }
 };
--- a/libgui/graphics/CheckBoxControl.h	Sun Apr 26 15:11:51 2020 -0700
+++ b/libgui/graphics/CheckBoxControl.h	Sun Apr 26 18:15:30 2020 -0700
@@ -50,6 +50,9 @@
     static CheckBoxControl *
     create (octave::base_qobject& oct_qobj, octave::interpreter& interp,
             const graphics_object& go);
+
+  protected:
+    void update (int pId);
   };
 
 }
--- a/libgui/graphics/RadioButtonControl.cc	Sun Apr 26 15:11:51 2020 -0700
+++ b/libgui/graphics/RadioButtonControl.cc	Sun Apr 26 18:15:30 2020 -0700
@@ -69,11 +69,39 @@
     if (btnGroup)
       btnGroup->addButton (radio);
 
+    uicontrol::properties& up = properties<uicontrol> ();
+
     radio->setAutoFillBackground (true);
     radio->setAutoExclusive (false);
+    if (up.enable_is ("inactive"))
+      radio->setCheckable (false);
   }
 
   RadioButtonControl::~RadioButtonControl (void)
   { }
 
+  void
+  RadioButtonControl::update (int pId)
+  {
+    uicontrol::properties& up = properties<uicontrol> ();
+    QRadioButton *btn = qWidget<QRadioButton> ();
+
+    switch (pId)
+      {
+      case uicontrol::properties::ID_ENABLE:
+        {
+          if (up.enable_is ("inactive"))
+            btn->setCheckable (false);
+          else
+            btn->setCheckable (true);
+          ButtonControl::update (pId);
+        }
+        break;
+
+      default:
+        ButtonControl::update (pId);
+        break;
+      }
+  }
+
 };
--- a/libgui/graphics/RadioButtonControl.h	Sun Apr 26 15:11:51 2020 -0700
+++ b/libgui/graphics/RadioButtonControl.h	Sun Apr 26 18:15:30 2020 -0700
@@ -50,6 +50,9 @@
     static RadioButtonControl * create (octave::base_qobject& oct_qobj,
                                         octave::interpreter& interp,
                                         const graphics_object& go);
+
+  protected:
+    void update (int pId);
   };
 
 }