diff libgui/graphics/Canvas.cc @ 27319:6b2d20317b26

use Qt signals to manage calls to gh_manager functions in Qt graphics toolkit Limit access to the gh_manager object to the qt_graphics_toolkit class by using Qt signals to pass gh_manager events from individual graphics objects up to the qt_graphics_toolkit object. From there, we can make calls to the gh_manager object. * qt-graphics-toolkit.h, qt-graphics-toolkit.cc (qt_graphics_toolkit::gh_callback_event, qt_graphics_toolkit::gh_set_event): New slots. (qt_graphics_toolkit::create_object): Connect Object::gh_callback_event and Object::gh_set_event signals to qt_graphics_toolkit::gh_callback_event and qt_graphics_toolkit::gh_set_event slots. * BaseControl.cc, ButtonControl.cc, ButtonGroup.cc, Canvas.cc, ContextMenu.cc, EditControl.cc, Figure.cc, ListBoxControl.cc, Menu.cc, PopupMenuControl.cc, PushTool.cc, SliderControl.cc, Table.cc, ToggleTool.cc: Emit gh_callback_event and gh_set_event signals instead of calling gh_manager functions directly. * Object.h (Object::gh_callback_event, Object::gh_set_event): New signals. * Canvas.h (Canvas::gh_callback_event, Canvas::gh_set_event): New signals. * Container.h (Container::gh_callback_event, Container::gh_set_event): New signals.
author John W. Eaton <jwe@octave.org>
date Fri, 02 Aug 2019 15:19:43 -0500
parents 718116e9c7d3
children 50216d7a2f6b
line wrap: on
line diff
--- a/libgui/graphics/Canvas.cc	Fri Aug 02 14:28:48 2019 -0500
+++ b/libgui/graphics/Canvas.cc	Fri Aug 02 15:19:43 2019 -0500
@@ -194,8 +194,8 @@
   {
     gh_manager::auto_lock lock;
 
-    gh_manager::post_set (fig.get_handle (), "currentpoint",
-                          Utils::figureCurrentPoint (fig, event), false);
+    emit gh_set_event (fig.get_handle (), "currentpoint",
+                       Utils::figureCurrentPoint (fig, event), false);
 
     Matrix children = obj.get_properties ().get_children ();
     octave_idx_type num_children = children.numel ();
@@ -220,8 +220,8 @@
             cp(0,0) = p1(0); cp(0,1) = p1(1); cp(0,2) = p1(2);
             cp(1,0) = p2(0); cp(1,1) = p2(1); cp(1,2) = p2(2);
 
-            gh_manager::post_set (childObj.get_handle (), "currentpoint", cp,
-                                  false);
+            emit gh_set_event (childObj.get_handle (), "currentpoint", cp,
+                               false);
           }
       }
   }
@@ -232,8 +232,8 @@
   {
     gh_manager::auto_lock lock;
 
-    gh_manager::post_set (fig.get_handle (), "currentpoint",
-                          Utils::figureCurrentPoint (fig), false);
+    emit gh_set_event (fig.get_handle (), "currentpoint",
+                       Utils::figureCurrentPoint (fig), false);
 
     Matrix children = obj.get_properties ().get_children ();
     octave_idx_type num_children = children.numel ();
@@ -260,8 +260,8 @@
             cp(0,0) = p1(0); cp(0,1) = p1(1); cp(0,2) = p1(2);
             cp(1,0) = p2(0); cp(1,1) = p2(1); cp(1,2) = p2(2);
 
-            gh_manager::post_set (childObj.get_handle (), "currentpoint", cp,
-                                  false);
+            emit gh_set_event (childObj.get_handle (), "currentpoint", cp,
+                               false);
           }
       }
   }
@@ -512,8 +512,8 @@
                 && ! figObj.get ("windowbuttonmotionfcn").isempty ())
               {
                 updateCurrentPoint (figObj, obj, event);
-                gh_manager::post_callback (figObj.get_handle (),
-                                           "windowbuttonmotionfcn");
+                emit gh_callback_event (figObj.get_handle (),
+                                        "windowbuttonmotionfcn");
               }
           }
       }
@@ -653,27 +653,24 @@
                 fprop.set_currentobject (Matrix ());
 
               // Update figure "selectiontype" and "currentpoint"
-              gh_manager::post_set (figObj.get_handle (), "selectiontype",
-                                    Utils::figureSelectionType (event,
-                                                                isdblclick),
-                                    false);
+              emit gh_set_event (figObj.get_handle (), "selectiontype",
+                                 Utils::figureSelectionType (event, isdblclick),
+                                 false);
 
               updateCurrentPoint (figObj, obj, event);
 
-              gh_manager::post_callback (figObj.get_handle (),
-                                         "windowbuttondownfcn",
-                                         button_number (event));
+              emit gh_callback_event (figObj.get_handle (),
+                                      "windowbuttondownfcn",
+                                      button_number (event));
 
               // Execute the "buttondownfcn" of the selected object. If the
               // latter is empty then execute the figure "buttondownfcn"
               if (currentObj && ! currentObj.get ("buttondownfcn").isempty ())
-                gh_manager::post_callback (currentObj.get_handle (),
-                                           "buttondownfcn",
-                                           button_number (event));
+                emit gh_callback_event (currentObj.get_handle (),
+                                        "buttondownfcn", button_number (event));
               else if (figObj && ! figObj.get ("buttondownfcn").isempty ())
-                gh_manager::post_callback (figObj.get_handle (),
-                                           "buttondownfcn",
-                                           button_number (event));
+                emit gh_callback_event (figObj.get_handle (),
+                                        "buttondownfcn", button_number (event));
 
               // Show context menu of the selected object
               if (currentObj && event->button () == Qt::RightButton)
@@ -845,8 +842,7 @@
             graphics_object figObj (obj.get_ancestor ("figure"));
 
             updateCurrentPoint (figObj, obj, event);
-            gh_manager::post_callback (figObj.get_handle (),
-                                       "windowbuttonupfcn");
+            emit gh_callback_event (figObj.get_handle (), "windowbuttonupfcn");
           }
       }
     else if (m_mouseMode == TextMode)
@@ -1005,8 +1001,8 @@
         if (! figObj.get ("windowscrollwheelfcn").isempty ())
           {
             octave_scalar_map eventData = Utils::makeScrollEventStruct (event);
-            gh_manager::post_callback (m_handle, "windowscrollwheelfcn",
-                                       eventData);
+            emit gh_callback_event (m_handle, "windowscrollwheelfcn",
+                                    eventData);
           }
       }
   }
@@ -1027,10 +1023,10 @@
 
             octave_scalar_map eventData = Utils::makeKeyEventStruct (event);
 
-            gh_manager::post_set (figObj.get_handle (), "currentcharacter",
-                                  eventData.getfield ("Character"), false);
-            gh_manager::post_callback (figObj.get_handle (), "keypressfcn",
-                                       eventData);
+            emit gh_set_event (figObj.get_handle (), "currentcharacter",
+                               eventData.getfield ("Character"), false);
+            emit gh_callback_event (figObj.get_handle (), "keypressfcn",
+                                    eventData);
           }
 
         return true;
@@ -1050,8 +1046,8 @@
         if (obj.valid_object ())
           {
             graphics_object figObj (obj.get_ancestor ("figure"));
-            gh_manager::post_callback (figObj.get_handle (), "keyreleasefcn",
-                                       Utils::makeKeyEventStruct (event));
+            emit gh_callback_event (figObj.get_handle (), "keyreleasefcn",
+                                    Utils::makeKeyEventStruct (event));
           }
 
         return true;