diff scripts/plot/util/private/__add_default_menu__.m @ 25878:bb4af245dff7

Use uimenu objects for default menus in Qt toolkit * Menu.cc (Menu::Menu): use QAction name to tag wether a menu is a builtin or a custom menu based on the uimenu "tag" property. * Figure.cc (hasUiMenuChildren): Remove (Figure::editCopy,Figure::fileCloseFigure,Figure::fileSaveFigureAs, Figure::copy_figure_callback, Figure::save_figure_callback): Remove (Figure::createFigureToolBarAndMenuBar): Don't create menus not backed by uimenu objects (Figure::showMenuBar): Make use of the QAction name for menu triage. Use the difference between previous and current menubar height to adjust the figure position. * __add_default_menu__.m: Create default menus for Qt aswell. Change actions in the "Edit" menu to "Tools" menu. Add a few actions in "Edit" menu. Rename uimenu handles to hui as is conventional in Octave code. * clf.m: With "reset" option, don't unnecessarily delete/recreate default menus.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Wed, 12 Sep 2018 23:19:40 +0200
parents 6652d3823428
children 6109f302cf43
line wrap: on
line diff
--- a/scripts/plot/util/private/__add_default_menu__.m	Tue Sep 11 22:18:28 2018 +0200
+++ b/scripts/plot/util/private/__add_default_menu__.m	Wed Sep 12 23:19:40 2018 +0200
@@ -26,41 +26,77 @@
 
 ## Author: Kai Habel
 
-function __add_default_menu__ (fig)
-
-  ## Only FLTK toolkit currently provides menubar
-  if (! strcmp (get (fig, "__graphics_toolkit__"), "fltk"))
-    return;
-  endif
-
-  obj = findall (fig, "-depth", 1, "tag", "__default_menu__", "label", "&File");
-  if (isempty (obj))
-    __f = uimenu (fig, "label", "&File", "handlevisibility", "off",
-                       "tag", "__default_menu__");
-      uimenu (__f, "label", "&Save", "callback", @save_cb);
-      uimenu (__f, "label", "Save &As", "callback", @save_cb);
-      uimenu (__f, "label", "&Close", "callback", @close_cb);
+function __add_default_menu__ (hf)
 
-    __e = uimenu (fig, "label", "&Edit", "handlevisibility", "off",
-                       "tag", "__default_menu__");
-      uimenu (__e, "label", "Toggle &grid on all axes", "tag", "toggle", "callback", @grid_cb);
-      uimenu (__e, "label", "Show grid on all axes", "tag", "on", "callback", @grid_cb);
-      uimenu (__e, "label", "Hide grid on all axes", "tag", "off", "callback", @grid_cb);
-      uimenu (__e, "label", "Auto&scale all axes", "callback", @autoscale_cb);
-      gm = uimenu (__e, "label", "GUI &Mode (on all axes)");
-        uimenu (gm, "label", "Pan x and y", "tag", "pan_on", "callback", @guimode_cb);
-        uimenu (gm, "label", "Pan x only", "tag", "pan_xon", "callback", @guimode_cb);
-        uimenu (gm, "label", "Pan y only", "tag", "pan_yon", "callback", @guimode_cb);
-        uimenu (gm, "label", "Disable pan and rotate", "tag", "no_pan_rotate", "callback", @guimode_cb);
-        uimenu (gm, "label", "Rotate on", "tag", "rotate3d", "callback", @guimode_cb);
-        uimenu (gm, "label", "Enable mousezoom", "tag", "zoom_on", "callback", @guimode_cb);
-        uimenu (gm, "label", "Disable mousezoom", "tag", "zoom_off", "callback", @guimode_cb);
-
+  obj = findall (hf, "-depth", 1, "tag", "__default_menu__File", ...
+                 "label", "&File");
+  if (isempty (obj))
+    ## File menu
+    hui = uimenu (hf, "label", "&File", "handlevisibility", "off", ...
+                  "tag", "__default_menu__File");
+    uimenu (hui, "label", "&Open", "callback", @open_cb, ...
+            "accelerator", "o");
+    uimenu (hui, "label", "&Save", "callback", @save_cb, ...
+            "accelerator", "s");
+    uimenu (hui, "label", "Save &As", "callback", @save_cb, ...
+            "accelerator", "S");
+    uimenu (hui, "label", "&Close", "callback", @close_cb, ...
+           "accelerator", "w", "separator", "on");
+    
+    ## Edit menu
+    hui = uimenu (hf, "label", "&Edit", "handlevisibility", "off", ...
+                  "tag", "__default_menu__Edit");
+    uimenu (hui, "label", "&New Figure", "callback", "figure ();", ...
+            "accelerator", "n");
+    uimenu (hui, "label", "&Duplicate Figure",
+            "callback", "copyobj (gcbf (), groot ());", ...
+            "accelerator", "d");
+    uimenu (hui, "label", "Clea&r Figure",
+            "callback", "clf (gcbf ());");
+    uimenu (hui, "label", "Reset Figure",
+            "callback", "reset (gcbf ());");
+    
+    ## Tools menu
+    hui = uimenu (hf, "label", "&Tools", "handlevisibility", "off", ...
+                  "tag", "__default_menu__Tools");
+    uimenu (hui, "label", "Toggle &grid on all axes", "tag", "toggle", ...
+            "callback", @grid_cb);
+    uimenu (hui, "label", "Show grid on all axes", "tag", "on", ...
+            "callback", @grid_cb);
+    uimenu (hui, "label", "Hide grid on all axes", "tag", "off", ...
+            "callback", @grid_cb);
+    uimenu (hui, "label", "Auto&scale all axes", "callback", @autoscale_cb);
+    
+    hui2 = uimenu (hui, "label", "GUI &Mode (on all axes)");
+    uimenu (hui2, "label", "Pan x and y", "tag", "pan_on", ...
+            "callback", @guimode_cb);
+    uimenu (hui2, "label", "Pan x only", "tag", "pan_xon", ...
+            "callback", @guimode_cb);
+    uimenu (hui2, "label", "Pan y only", "tag", "pan_yon", ...
+            "callback", @guimode_cb);
+    uimenu (hui2, "label", "Disable pan and rotate", "tag", ...
+            "no_pan_rotate", "callback", @guimode_cb);
+    uimenu (hui2, "label", "Rotate on", "tag", "rotate3d", ...
+            "callback", @guimode_cb);
+    uimenu (hui2, "label", "Enable mousezoom", "tag", "zoom_on", ...
+            "callback", @guimode_cb);
+    uimenu (hui2, "label", "Disable mousezoom", "tag", "zoom_off", ...
+            "callback", @guimode_cb);
   endif
 
 endfunction
 
 
+function open_cb (h, e)
+  [filename, filedir] = uigetfile ({"*.ofig", "Octave Figure File"}, ...
+                                   "Open Figure");
+  if (filename != 0)
+    fname = fullfile (filedir, filename);
+    tmphf = hgload (fname);
+    set (tmphf, "filename", fname);
+  endif
+endfunction
+
 function save_cb (h, e)
   [hcbo, hfig] = gcbo ();
   lbl = get (hcbo, "label");
@@ -77,7 +113,7 @@
 endfunction
 
 
-function __save_as__ (caller)
+function __save_as__ (hf)
   [filename, filedir] = uiputfile ...
     ({"*.ofig", "Octave Figure File";
       "*.eps;*.epsc;*.pdf;*.svg;*.ps;*.tikz", "Vector Image Formats";
@@ -89,9 +125,9 @@
     set (gcbf, "filename", fname);
     flen = numel (fname);
     if (flen > 5 && strcmp (fname(flen-4:end), ".ofig"))
-      hgsave (caller, fname);
+      hgsave (hf, fname);
     else
-      saveas (caller, fname);
+      saveas (hf, fname);
     endif
   endif
 endfunction