annotate scripts/plot/private/__add_default_menu__.m @ 17136:e4968b4613a5

Overhaul default menubar (still not perfect). * scripts/plot/figure.m: Always call __add_default_menu__. * scripts/plot/private/__add_default_menu__.m: Check that toolkit is FLTK before proceeding. Don't do redundant check that input is figure handle. Don't turn off handlevisibility for submenus, they are already hidden from above. Restrict findall() search to a depth of 1. Add __default_menu__ tags to Edit and Help menus so they can be identified. Don't call drawnow unnecessarily in callback routines. Use gcbf() so that Save filename is stored on a per figure basis rather than globally. Eliminate assigning to unused variables. Add HACK to turn off menubar if property is set to "none" on figure.
author Rik <rik@octave.org>
date Thu, 01 Aug 2013 10:18:54 -0700
parents 5d3a684236b0
children bc924baa2c4e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 12575
diff changeset
1 ## Copyright (C) 2010-2012 Kai Habel
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
2 ##
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
3 ## This file is part of Octave.
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
4 ##
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
8 ## your option) any later version.
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
9 ##
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
13 ## General Public License for more details.
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
14 ##
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
18
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
19 ## -*- texinfo -*-
11563
3c6e8aaa9555 Grammarcheck m-files before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
20 ## @deftypefn {Function File} {} __add_default_menu__ (@var{fig})
12575
d0b799dafede Grammarcheck files for 3.4.1 release.
Rik <octave@nomad.inbox5.com>
parents: 12457
diff changeset
21 ## Add default menu to figure. All uimenu handles have
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
22 ## their "HandleVisibility" property set to "off".
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
23 ## @end deftypefn
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
24
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
25 ## Author: Kai Habel
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
26
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
27 function __add_default_menu__ (fig)
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
28
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
29 ## Only FLTK toolkit currently provides menubar
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
30 if (! strcmp (get (fig, "__graphics_toolkit__"), "fltk"))
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
31 return;
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
32 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
33
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
34 obj = findall (fig, "-depth", 1, "tag", "__default_menu__", "label", "&File");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
35 if (isempty (obj))
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
36 ## FIXME: uimenu() will cause menubar to be displayed, even though property
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
37 ## menubar remains set at "none". So, forcibly turn menubar status
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
38 ## on and then off to force figure to hide menubar.
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
39 menubar_state = get (fig, "menubar");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
40 set (fig, "menubar", "figure");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
41 drawnow ();
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
42
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
43 __f = uimenu (fig, "label", "&File", "handlevisibility", "off",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
44 "tag", "__default_menu__");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
45 uimenu (__f, "label", "Save &As", "callback", @save_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
46 uimenu (__f, "label", "&Save", "callback", @save_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
47 uimenu (__f, "label", "&Close", "callback", "close (gcf)");
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
48
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
49 __e = uimenu (fig, "label", "&Edit", "handlevisibility", "off",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
50 "tag", "__default_menu__");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
51 uimenu (__e, "label", "&Grid", "callback", @grid_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
52 uimenu (__e, "label", "Auto&scale", "callback", @autoscale_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
53 gm = uimenu (__e, "label", "GUI &Mode");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
54 uimenu (gm, "label", "Pan+Zoom", "callback", @guimode_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
55 uimenu (gm, "label", "Rotate+Zoom", "callback", @guimode_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
56 uimenu (gm, "label", "None", "callback", @guimode_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
57
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
58 __h = uimenu (fig, "label", "&Help", "handlevisibility", "off",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
59 "tag", "__default_menu__");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
60 uimenu (__h, "label", "A&bout", "enable", "off");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
61
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
62 set (fig, "menubar", menubar_state);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
63 endif
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
64
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
65 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
66
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
67 function save_cb (h, e)
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
68 lbl = get (gcbo, "label");
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
69 if (strcmp (lbl, "&Save"))
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
70 fname = get (gcbo, "userdata");
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
71 if (isempty (fname))
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
72 __save_as__ (gcbo);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
73 else
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
74 saveas (gcbo, fname);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
75 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
76 elseif (strcmp (lbl, "Save &As"))
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
77 __save_as__ (gcbo);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
78 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
79 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
80
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
81 function __save_as__ (caller)
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
82 [filename, filedir] = uiputfile ({"*.pdf;*.ps;*.gif;*.png;*.jpg",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
83 "Supported Graphic Formats"},
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
84 "Save Figure",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
85 pwd);
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
86 if (filename != 0)
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
87 fname = [filedir filesep() filename];
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
88 obj = findall (gcbf, "label", "&Save");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
89 if (! isempty (obj))
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
90 set (obj(1), "userdata", fname);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
91 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
92 saveas (caller, fname);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
93 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
94 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
95
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
96 function grid_cb (h, e)
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
97 grid;
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
98 endfunction
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
99
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
100 function autoscale_cb (h, e)
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
101 axis ("auto");
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
102 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
103
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
104 function guimode_cb (h, e)
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
105 lbl = get (h, "label");
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
106 switch (lbl)
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
107 case "Pan+Zoom"
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
108 gui_mode ("2D");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
109 case "Rotate+Zoom"
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
110 gui_mode ("3D");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
111 case "None"
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
112 gui_mode ("None");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
113 endswitch
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
114 endfunction
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
115