annotate scripts/plot/util/private/__add_default_menu__.m @ 18961:52e01aa1fe8b

Overhaul FLTK pan, rotate, zoom * graphics.in.h: add axes properties pan, rotate3d, mouse_wheel_zoom and custom set_pan which disables rotate3d. * graphics.cc: add custom set_rotate3d and link with pan property. Disable rotate3d for 2D plots. * __init_fltk__.cc: replace gui_mode and mouse_wheel_zoom with axes properties pan, rotate3d and mouse_wheel_zoom. Disable pan for legends, move them instead. * __add_default_menu__.m: Add new menu entries for new pan and zoom modes. * findall.m: Update test for added uimenus. Each axes now has its own properties for interactive GUI control of pan, rotate3d and mouse_wheel_zoom. Now it's possible to have several figures and set pan for the 2D plot in figure x and rotate3d for the 3D plot in figure y. There are two new pan modes: "Pan x only" and "Pan y only". The toolbar buttons "P" and "R" set pan and rotate3d for the last clicked axes object or the object below the center of the canvas if none was clicked yet. The legend can now be moved with the mouse.
author Andreas Weber <andy.weber.aw@gmail.com>
date Sun, 27 Jul 2014 22:31:14 +0200
parents c9f960441513
children 137d01e7c2d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17744
d63878346099 maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents: 17572
diff changeset
1 ## Copyright (C) 2010-2013 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
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17136
diff changeset
22 ## their @qcode{"HandleVisibility"} property set to @qcode{"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 __f = uimenu (fig, "label", "&File", "handlevisibility", "off",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
37 "tag", "__default_menu__");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
38 uimenu (__f, "label", "Save &As", "callback", @save_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
39 uimenu (__f, "label", "&Save", "callback", @save_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
40 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
41
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
42 __e = uimenu (fig, "label", "&Edit", "handlevisibility", "off",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
43 "tag", "__default_menu__");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
44 uimenu (__e, "label", "&Grid", "callback", @grid_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
45 uimenu (__e, "label", "Auto&scale", "callback", @autoscale_cb);
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
46 gm = uimenu (__e, "label", "GUI &Mode");
18961
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
47 uimenu (gm, "label", "Pan x and y", "tag", "pan_on", "callback", @guimode_cb);
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
48 uimenu (gm, "label", "Pan x only", "tag", "pan_xon", "callback", @guimode_cb);
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
49 uimenu (gm, "label", "Pan y only", "tag", "pan_yon", "callback", @guimode_cb);
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
50 uimenu (gm, "label", "Rotate on", "tag", "rotate3d", "callback", @guimode_cb);
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
51 uimenu (gm, "label", "Enable mousezoom", "tag", "zoom_on", "callback", @guimode_cb);
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
52 uimenu (gm, "label", "Disable mousezoom", "tag", "zoom_off", "callback", @guimode_cb);
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
53
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
54 endif
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
55
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
56 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
57
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
58 function save_cb (h, e)
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
59 lbl = get (gcbo, "label");
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
60 if (strcmp (lbl, "&Save"))
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
61 fname = get (gcbo, "userdata");
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
62 if (isempty (fname))
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
63 __save_as__ (gcbo);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
64 else
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
65 saveas (gcbo, fname);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
66 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
67 elseif (strcmp (lbl, "Save &As"))
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
68 __save_as__ (gcbo);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
69 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
70 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
71
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
72 function __save_as__ (caller)
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
73 [filename, filedir] = uiputfile ({"*.pdf;*.ps;*.gif;*.png;*.jpg",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
74 "Supported Graphic Formats"},
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
75 "Save Figure",
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
76 pwd);
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
77 if (filename != 0)
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
78 fname = [filedir filesep() filename];
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
79 obj = findall (gcbf, "label", "&Save");
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
80 if (! isempty (obj))
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
81 set (obj(1), "userdata", fname);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
82 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
83 saveas (caller, fname);
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
84 endif
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
85 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
86
17136
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
87 function grid_cb (h, e)
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
88 grid;
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
89 endfunction
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 14868
diff changeset
90
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
91 function autoscale_cb (h, e)
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
92 axis ("auto");
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
93 endfunction
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
94
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents:
diff changeset
95 function guimode_cb (h, e)
18961
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
96 id = get (h, "tag");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
97 switch (id)
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
98 case "pan_on"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
99 set (gco, "pan", "on");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
100 case "pan_xon"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
101 set (gco, "pan", "xon");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
102 case "pan_yon"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
103 set (gco, "pan", "yon");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
104 case "rotate3d"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
105 set (gco, "rotate3d", "on");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
106 case "no_pan_rotate"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
107 set (gco, "pan", "off");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
108 set (gco, "rotate3d", "off");
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
109 case "zoom_on"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
110 set (gco, "mouse_wheel_zoom", 0.05);
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
111 case "zoom_off"
52e01aa1fe8b Overhaul FLTK pan, rotate, zoom
Andreas Weber <andy.weber.aw@gmail.com>
parents: 18958
diff changeset
112 set (gco, "mouse_wheel_zoom", 0.0);
17136
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