annotate scripts/plot/figure.m @ 17140: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 eaab03308c0b
children 603ce503babd
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: 13325
diff changeset
1 ## Copyright (C) 1996-2012 John W. Eaton
2313
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
2 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
3 ## This file is part of Octave.
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
4 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
6 ## under the terms of the GNU General Public License as published by
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6895
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6895
diff changeset
8 ## your option) any later version.
2313
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
9 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
13 ## General Public License for more details.
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
14 ##
5ca126254d15 [project @ 1996-07-11 21:25:22 by jwe]
jwe
parents: 2311
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6895
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6895
diff changeset
17 ## <http://www.gnu.org/licenses/>.
2290
9170d297145f [project @ 1996-06-06 05:18:49 by jwe]
jwe
parents:
diff changeset
18
3368
a4cd1e9d9962 [project @ 1999-11-20 17:22:48 by jwe]
jwe
parents: 3263
diff changeset
19 ## -*- texinfo -*-
14366
b76f0740940e doc: Periodic grammar check of documentation.
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
20 ## @deftypefn {Command} {} figure
b76f0740940e doc: Periodic grammar check of documentation.
Rik <octave@nomad.inbox5.com>
parents: 14363
diff changeset
21 ## @deftypefnx {Command} {} figure @var{n}
14276
6b4bd6a86bdd figure.m: Extend to accepting command form "figure N"
Rik <octave@nomad.inbox5.com>
parents: 14226
diff changeset
22 ## @deftypefnx {Function File} {} figure (@var{n})
17126
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
23 ## @deftypefnx {Function File} {} figure (@dots{}, "@var{property}", @var{value}, @dots{})
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
24 ## @deftypefnx {Function File} {@var{h} =} figure (@var{dots})
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
25 ## Create a new figure window for plotting.
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
26 ##
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
27 ## If no arguments are specified, a new figure with the next available number
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
28 ## is created.
6895
76e3d985ae56 [project @ 2007-09-13 18:22:38 by jwe]
jwe
parents: 6780
diff changeset
29 ##
17126
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
30 ## If called with an integer @var{n}, and no such numbered figure exists, then
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
31 ## a new figure with the specified number is created. If the figure already
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
32 ## exists then it is made visible and becomes the current figure for plotting.
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
33 ##
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
34 ## Multiple property-value pairs may be specified for the figure object, but
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
35 ## they must appear in pairs.
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
36 ##
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
37 ## The optional return value @var{h} is a graphics handle to the created figure
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
38 ## object.
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 14846
diff changeset
39 ## @seealso{axes, gcf, clf, close}
3368
a4cd1e9d9962 [project @ 1999-11-20 17:22:48 by jwe]
jwe
parents: 3263
diff changeset
40 ## @end deftypefn
2290
9170d297145f [project @ 1996-06-06 05:18:49 by jwe]
jwe
parents:
diff changeset
41
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
42 ## Author: jwe, Bill Denney
2314
949ab8eba8bc [project @ 1996-07-12 03:58:02 by jwe]
jwe
parents: 2313
diff changeset
43
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
44 function h = figure (varargin)
3263
7d80b56e0dc8 [project @ 1999-08-20 19:10:09 by jwe]
jwe
parents: 3103
diff changeset
45
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
46 nargs = nargin;
5406
c49aec8a9080 [project @ 2005-07-08 15:25:43 by jwe]
jwe
parents: 5307
diff changeset
47
6405
b298a4c12fc3 [project @ 2007-03-14 16:51:28 by jwe]
jwe
parents: 6308
diff changeset
48 f = NaN;
6283
7099f1ae465e [project @ 2007-02-08 08:37:00 by jwe]
jwe
parents: 6257
diff changeset
49
6293
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
50 init_new_figure = false;
6283
7099f1ae465e [project @ 2007-02-08 08:37:00 by jwe]
jwe
parents: 6257
diff changeset
51 if (mod (nargs, 2) == 1)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
52 tmp = varargin{1};
14276
6b4bd6a86bdd figure.m: Extend to accepting command form "figure N"
Rik <octave@nomad.inbox5.com>
parents: 14226
diff changeset
53 if (ischar (tmp))
6b4bd6a86bdd figure.m: Extend to accepting command form "figure N"
Rik <octave@nomad.inbox5.com>
parents: 14226
diff changeset
54 tmp = str2double (tmp);
6b4bd6a86bdd figure.m: Extend to accepting command form "figure N"
Rik <octave@nomad.inbox5.com>
parents: 14226
diff changeset
55 endif
14226
d580d7179f85 Use isfigure() to simplify some plot functions.
Rik <octave@nomad.inbox5.com>
parents: 14183
diff changeset
56 if (isfigure (tmp))
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
57 f = tmp;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
58 varargin(1) = [];
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
59 nargs--;
13279
984359717d71 Use common code idiom for checking whether a double value is an integer.
Rik <octave@nomad.inbox5.com>
parents: 13204
diff changeset
60 elseif (isnumeric (tmp) && tmp > 0 && tmp == fix (tmp))
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
61 f = tmp;
6293
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
62 init_new_figure = true;
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
63 varargin(1) = [];
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
64 nargs--;
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
65 else
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
66 error ("figure: expecting figure handle or figure number");
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
67 endif
3263
7d80b56e0dc8 [project @ 1999-08-20 19:10:09 by jwe]
jwe
parents: 3103
diff changeset
68 endif
7d80b56e0dc8 [project @ 1999-08-20 19:10:09 by jwe]
jwe
parents: 3103
diff changeset
69
6293
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
70 ## Check to see if we already have a figure on the screen. If we do,
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
71 ## then update it if it is different from the figure we are creating
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
72 ## or switching to.
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14366
diff changeset
73 cf = get (0, "currentfigure"); # Can't use gcf () because it calls figure ()
6293
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
74 if (! isempty (cf) && cf != 0)
6405
b298a4c12fc3 [project @ 2007-03-14 16:51:28 by jwe]
jwe
parents: 6308
diff changeset
75 if (isnan (f) || cf != f)
6293
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
76 drawnow ();
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
77 endif
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
78 endif
b649aa46950d [project @ 2007-02-09 21:50:40 by jwe]
jwe
parents: 6283
diff changeset
79
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
80 if (rem (nargs, 2) == 0)
6405
b298a4c12fc3 [project @ 2007-03-14 16:51:28 by jwe]
jwe
parents: 6308
diff changeset
81 if (isnan (f) || init_new_figure)
14183
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
82 if (ismac () && strcmp (graphics_toolkit (), "fltk"))
14276
6b4bd6a86bdd figure.m: Extend to accepting command form "figure N"
Rik <octave@nomad.inbox5.com>
parents: 14226
diff changeset
83 ## FIXME - Hack for fltk-aqua to work around bug #31931
14183
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
84 f = __go_figure__ (f);
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
85 drawnow ();
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
86 if (! isempty (varargin))
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
87 set (f, varargin{:});
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
88 endif
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
89 else
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
90 f = __go_figure__ (f, varargin{:});
9e6ec5f55827 When creating an fltk (aqua) figure on MacOS, make sure one drawnow() occurs
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
91 endif
6780
38bc358b6c9a [project @ 2007-07-18 18:02:56 by jwe]
jwe
parents: 6405
diff changeset
92 elseif (nargs > 0)
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
93 set (f, varargin{:});
2290
9170d297145f [project @ 1996-06-06 05:18:49 by jwe]
jwe
parents:
diff changeset
94 endif
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
95 set (0, "currentfigure", f);
2290
9170d297145f [project @ 1996-06-06 05:18:49 by jwe]
jwe
parents:
diff changeset
96 else
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5489
diff changeset
97 print_usage ();
2290
9170d297145f [project @ 1996-06-06 05:18:49 by jwe]
jwe
parents:
diff changeset
98 endif
3263
7d80b56e0dc8 [project @ 1999-08-20 19:10:09 by jwe]
jwe
parents: 3103
diff changeset
99
17140
e4968b4613a5 Overhaul default menubar (still not perfect).
Rik <rik@octave.org>
parents: 17126
diff changeset
100 __add_default_menu__ (f);
11349
4a3258b1448f Add default menu for fltk backend figures
Kai Habel <kai.habel@gmx.de>
parents: 10793
diff changeset
101
6283
7099f1ae465e [project @ 2007-02-08 08:37:00 by jwe]
jwe
parents: 6257
diff changeset
102 if (nargout > 0)
7099f1ae465e [project @ 2007-02-08 08:37:00 by jwe]
jwe
parents: 6257
diff changeset
103 h = f;
7099f1ae465e [project @ 2007-02-08 08:37:00 by jwe]
jwe
parents: 6257
diff changeset
104 endif
7099f1ae465e [project @ 2007-02-08 08:37:00 by jwe]
jwe
parents: 6257
diff changeset
105
2290
9170d297145f [project @ 1996-06-06 05:18:49 by jwe]
jwe
parents:
diff changeset
106 endfunction
13204
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
107
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14276
diff changeset
108
13204
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
109 %!test
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
110 %! hf = figure ("visible", "off");
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
111 %! unwind_protect
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
112 %! assert (gcf, hf);
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
113 %! assert (isfigure (hf));
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
114 %! unwind_protect_cleanup
be7bfd59300a Add tests for scripts/plot
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
115 %! close (hf);
13279
984359717d71 Use common code idiom for checking whether a double value is an integer.
Rik <octave@nomad.inbox5.com>
parents: 13204
diff changeset
116 %! end_unwind_protect
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14276
diff changeset
117