# HG changeset patch # User Rik # Date 1587950130 25200 # Node ID aee0f20c802997eb4d5f8f4b7d70e491a25aea6b # Parent 20794455ea11be8ecda85e2093a5156737d546ce 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. diff -r 20794455ea11 -r aee0f20c8029 libgui/graphics/BaseControl.cc --- 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") diff -r 20794455ea11 -r aee0f20c8029 libgui/graphics/CheckBoxControl.cc --- 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 (); + box->setAutoFillBackground (true); + if (up.enable_is ("inactive")) + box->setCheckable (false); } CheckBoxControl::~CheckBoxControl (void) { } + void + CheckBoxControl::update (int pId) + { + uicontrol::properties& up = properties (); + QCheckBox *box = qWidget (); + + 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; + } + } }; diff -r 20794455ea11 -r aee0f20c8029 libgui/graphics/CheckBoxControl.h --- 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); }; } diff -r 20794455ea11 -r aee0f20c8029 libgui/graphics/RadioButtonControl.cc --- 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 (); + 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 (); + QRadioButton *btn = qWidget (); + + 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; + } + } + }; diff -r 20794455ea11 -r aee0f20c8029 libgui/graphics/RadioButtonControl.h --- 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); }; }