Mercurial > octave-antonio
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 |
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 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
4225 | 9 ## |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
4225 | 18 |
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 | 23 ## @deftypefnx {Command} {} close all |
6257 | 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 | 50 ## @end deftypefn |
51 | |
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 | 54 |
55 function retval = close (arg1, arg2) | |
56 | |
6405 | 57 figs = []; |
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 | 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 | 66 figs = []; |
67 endif | |
4225 | 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 | 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 | 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 | 91 endif |
92 | |
6257 | 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 | 95 endfor |
96 | |
4225 | 97 if (nargout > 0) |
98 retval = 1; | |
99 endif | |
100 | |
101 endfunction | |
6405 | 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 |