Mercurial > octave
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