annotate scripts/plot/util/close.m @ 20115:7e0e8fb16201

Overhaul close.m to add "force" argument (bug #44324) * close.m: Emit an error if there is no figure handle or "all" argument given. Check for "force" argument and delete the requested figure handles rather than calling closereqfcn. Add BIST input validation tests. Add new calling forms and explanation of "force" to docstring.
author Rik <rik@octave.org>
date Wed, 22 Apr 2015 08:41:50 -0700
parents 4197fc428c7d
children 3797df921988
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 18224
diff changeset
1 ## Copyright (C) 2002-2015 John W. Eaton
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
2 ##
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
4 ##
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
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.
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
9 ##
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
13 ## General Public License for more details.
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
14 ##
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
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/>.
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
18
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10598
diff changeset
20 ## @deftypefn {Command} {} close
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
21 ## @deftypefnx {Command} {} close (@var{h})
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
22 ## @deftypefnx {Command} {} close @var{h}
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
23 ## @deftypefnx {Command} {} close all
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
24 ## @deftypefnx {Command} {} close all hidden
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
25 ## @deftypefnx {Command} {} close all force
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
26 ## Close figure window(s).
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
27 ##
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
28 ## When called with no arguments, close the current figure. This is equivalent
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17093
diff changeset
29 ## to @code{close (gcf)}. If the input @var{h} is a graphic handle, or vector
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17093
diff changeset
30 ## of graphics handles, then close each figure in @var{h}.
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
31 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17135
diff changeset
32 ## If the argument @qcode{"all"} is given then all figures with visible handles
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17135
diff changeset
33 ## (HandleVisibility = @qcode{"on"}) are closed.
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
34 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17135
diff changeset
35 ## If the argument @qcode{"all hidden"} is given then all figures, including
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17135
diff changeset
36 ## hidden ones, are closed.
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
37 ##
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
38 ## If the argument @qcode{"all force"} is given then all figures are closed
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
39 ## even when @qcode{"closerequestfcn"} has been altered to prevent closing
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
40 ## the window.
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
41 ##
17444
ffa7f1caab4e Clarify relationship of close, closereq.
Rik <rik@octave.org>
parents: 17281
diff changeset
42 ## Implementation Note: @code{close} operates by calling the function specified
ffa7f1caab4e Clarify relationship of close, closereq.
Rik <rik@octave.org>
parents: 17281
diff changeset
43 ## by the @qcode{"closerequestfcn"} property for each figure. By default, the
ffa7f1caab4e Clarify relationship of close, closereq.
Rik <rik@octave.org>
parents: 17281
diff changeset
44 ## function @code{closereq} is used. It is possible that the function invoked
ffa7f1caab4e Clarify relationship of close, closereq.
Rik <rik@octave.org>
parents: 17281
diff changeset
45 ## will delay or abort removing the figure. To remove a figure without
ffa7f1caab4e Clarify relationship of close, closereq.
Rik <rik@octave.org>
parents: 17281
diff changeset
46 ## executing any callback functions use @code{delete}. When writing a callback
ffa7f1caab4e Clarify relationship of close, closereq.
Rik <rik@octave.org>
parents: 17281
diff changeset
47 ## function to close a window do not use @code{close} to avoid recursion.
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
48 ##
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
49 ## @seealso{closereq, delete}
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
50 ## @end deftypefn
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
51
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
52 ## Author: jwe
10598
6e1674216b99 close.m: No error on "close([])".
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
53 ## 2010-05-02 PBig allow empty argument
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
54
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
55 function retval = close (arg1, arg2)
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
56
6405
b298a4c12fc3 [project @ 2007-03-14 16:51:28 by jwe]
jwe
parents: 6278
diff changeset
57 figs = [];
b298a4c12fc3 [project @ 2007-03-14 16:51:28 by jwe]
jwe
parents: 6278
diff changeset
58
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
59 if (nargin > 2)
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
60 print_usage ();
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
61 elseif (nargin == 0)
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
62 ## Close current figure.
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
63 ## Can't use gcf because it opens a new plot window if one does not exist.
6278
300fb48803e3 [project @ 2007-02-07 22:23:37 by jwe]
jwe
parents: 6257
diff changeset
64 figs = get (0, "currentfigure");
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
65 if (figs == 0) # don't close root figure
6278
300fb48803e3 [project @ 2007-02-07 22:23:37 by jwe]
jwe
parents: 6257
diff changeset
66 figs = [];
300fb48803e3 [project @ 2007-02-07 22:23:37 by jwe]
jwe
parents: 6257
diff changeset
67 endif
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
68 elseif (nargin == 1)
8190
73d6b71788c0 use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents: 7966
diff changeset
69 if (ischar (arg1) && strcmpi (arg1, "all"))
17093
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
70 figs = (get (0, "children"))';
e5ded64def41 close.m: Fix close to remove hidden figures with "all hidden" argument.
Rik <rik@octave.org>
parents: 14868
diff changeset
71 figs = figs(isfigure (figs));
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
72 elseif (any (isfigure (arg1)))
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
73 figs = arg1(isfigure (arg1));
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
74 else
17135
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
75 error ('close: first argument must be "all" or a figure handle');
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
76 endif
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
77 elseif (ischar (arg2)
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
78 && (strcmpi (arg2, "hidden") || strcmpi (arg2, "force")))
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
79 if (ischar (arg1) && strcmpi (arg1, "all"))
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
80 figs = (allchild (0))';
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
81 figs = figs(isfigure (figs));
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
82 else
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
83 error ('close: first argument must be "all" with "hidden" or "force"');
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
84 endif
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
85 if (strcmpi (arg2, "force"))
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
86 delete (figs);
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
87 return;
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
88 endif
17135
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
89 else
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
90 error ('close: second argument must be "hidden" or "force"');
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
91 endif
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
92
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
93 for h = figs
7966
5747be3ac497 Implement closereq as real callback execution
John W. Eaton <jwe@octave.org>
parents: 7017
diff changeset
94 __go_execute_callback__ (h, "closerequestfcn");
6257
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
95 endfor
44c91c5dfe1d [project @ 2007-01-30 19:16:52 by jwe]
jwe
parents: 6046
diff changeset
96
4225
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
97 if (nargout > 0)
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
98 retval = 1;
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
99 endif
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
100
fa4dfbc33ce5 [project @ 2002-12-18 03:07:48 by jwe]
jwe
parents:
diff changeset
101 endfunction
6405
b298a4c12fc3 [project @ 2007-03-14 16:51:28 by jwe]
jwe
parents: 6278
diff changeset
102
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
103
13123
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
104 %!test
13124
2ea1658ad049 Don't use explicit figure number for tests to avoid interference with any figures opened by user.
Kai Habel <kai.habel@gmx.de>
parents: 13123
diff changeset
105 %! hf = figure ("visible", "off");
13123
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
106 %! unwind_protect
13124
2ea1658ad049 Don't use explicit figure number for tests to avoid interference with any figures opened by user.
Kai Habel <kai.habel@gmx.de>
parents: 13123
diff changeset
107 %! close (hf);
13123
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
108 %! objs = findobj ("type", "figure");
17135
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
109 %! assert (! any (objs == hf));
13123
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
110 %! unwind_protect_cleanup
13124
2ea1658ad049 Don't use explicit figure number for tests to avoid interference with any figures opened by user.
Kai Habel <kai.habel@gmx.de>
parents: 13123
diff changeset
111 %! if (isfigure (hf))
13123
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
112 %! close (hf);
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
113 %! endif
6efa1a691713 Add further tests for scripts/plot.
Kai Habel <kai.habel@gmx.de>
parents: 11523
diff changeset
114 %! end_unwind_protect
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
115
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
116 ## Test input validation
17135
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
117 %!error close (1,2,3)
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
118 %!error <first argument must be "all" or a figure> close ({"all"})
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
119 %!error <first argument must be "all" or a figure> close ("all_and_more")
723a08d266d2 close.m: Add input validation for 2 input args and %!error test blocks.
Rik <rik@octave.org>
parents: 17122
diff changeset
120 %!error <first argument must be "all" or a figure> close (-1)
20115
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
121 %!error <first argument must be "all" with "hidden"> close foo hidden
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
122 %!error <first argument must be "all" with "hidden"> close foo force
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
123 %!error <second argument must be "hidden"> close all hid
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
124 %!error <second argument must be "hidden"> close all for
7e0e8fb16201 Overhaul close.m to add "force" argument (bug #44324)
Rik <rik@octave.org>
parents: 19697
diff changeset
125