changeset 25788:88e87c69c8b8

Implement "cdata" property for pushbuttons (bug #44332). * ToggleButtonControl.h (update): Add protected function to class. * ToggleButtonControl.cc (ToggleButtonControl): In constructor, create a QImage from "cdata" property and apply it using setIcon(). * ToggleButtonControl.cc (update): New function to handle changes to object properties. Decode "ID_CDATA" in switch statement. Create a QImage from "cdata" property and apply it using setIcon(). * PushButtonControl.cc (PushButtonControl): In constructor, create a QImage from "cdata" property and apply it using setIcon(). * PushButtonControl.cc (update): Decode "ID_CDATA" in switch statement. Create a QImage from "cdata" property and apply it using setIcon().
author Rik <rik@octave.org>
date Tue, 14 Aug 2018 11:52:38 -0700
parents 3293cd2651fb
children cc9da21511c1
files libgui/graphics/PushButtonControl.cc libgui/graphics/ToggleButtonControl.cc libgui/graphics/ToggleButtonControl.h
diffstat 3 files changed, 50 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/graphics/PushButtonControl.cc	Tue Aug 14 11:17:26 2018 -0700
+++ b/libgui/graphics/PushButtonControl.cc	Tue Aug 14 11:52:38 2018 -0700
@@ -54,7 +54,13 @@
                                         QPushButton *btn)
     : ButtonControl (go, btn)
   {
+    uicontrol::properties& up = properties<uicontrol> ();
+
     btn->setAutoFillBackground (true);
+    octave_value cdat = up.get_cdata ();
+    QImage img = Utils::makeImageFromCData (cdat,
+                                            cdat.rows (), cdat.columns ());
+    btn->setIcon (QIcon (QPixmap::fromImage (img)));
   }
 
   PushButtonControl::~PushButtonControl (void)
@@ -72,6 +78,16 @@
         btn->setText (Utils::fromStdString (up.get_string_string ()));
         break;
 
+      case uicontrol::properties::ID_CDATA:
+        {
+          octave_value cdat = up.get_cdata ();
+          QImage img = Utils::makeImageFromCData (cdat,
+                                                  cdat.rows (),
+                                                  cdat.columns ());
+          btn->setIcon (QIcon (QPixmap::fromImage (img)));
+        }
+        break;
+
       default:
         BaseControl::update (pId);
         break;
--- a/libgui/graphics/ToggleButtonControl.cc	Tue Aug 14 11:17:26 2018 -0700
+++ b/libgui/graphics/ToggleButtonControl.cc	Tue Aug 14 11:52:38 2018 -0700
@@ -51,7 +51,7 @@
   }
 
   ToggleButtonControl::ToggleButtonControl (const graphics_object& go,
-      QPushButton *btn)
+                                            QPushButton *btn)
     : ButtonControl (go, btn)
   {
     Object *parent = Object::parentObject (go);
@@ -59,11 +59,41 @@
     if (btnGroup)
       btnGroup->addButton (btn);
 
+    uicontrol::properties& up = properties<uicontrol> ();
+
     btn->setCheckable (true);
     btn->setAutoFillBackground (true);
+    octave_value cdat = up.get_cdata ();
+    QImage img = Utils::makeImageFromCData (cdat,
+                                            cdat.rows (), cdat.columns ());
+    btn->setIcon (QIcon (QPixmap::fromImage (img)));
   }
 
   ToggleButtonControl::~ToggleButtonControl (void)
   { }
 
+  void
+  ToggleButtonControl::update (int pId)
+  {
+    uicontrol::properties& up = properties<uicontrol> ();
+    QPushButton *btn = qWidget<QPushButton> ();
+
+    switch (pId)
+      {
+      case uicontrol::properties::ID_CDATA:
+        {
+          octave_value cdat = up.get_cdata ();
+          QImage img = Utils::makeImageFromCData (cdat,
+                                                  cdat.rows (),
+                                                  cdat.columns ());
+          btn->setIcon (QIcon (QPixmap::fromImage (img)));
+        }
+        break;
+
+      default:
+        BaseControl::update (pId);
+        break;
+      }
+  }
+
 };
--- a/libgui/graphics/ToggleButtonControl.h	Tue Aug 14 11:17:26 2018 -0700
+++ b/libgui/graphics/ToggleButtonControl.h	Tue Aug 14 11:52:38 2018 -0700
@@ -37,6 +37,9 @@
     ~ToggleButtonControl (void);
 
     static ToggleButtonControl * create (const graphics_object& go);
+
+  protected:
+    void update (int pId);
   };
 
 }