Mercurial > hg > octave-lyh
annotate scripts/plot/ancestor.m @ 17069:1cbdd14711c5
scatter3.m, scatter.m: Update to use new __plt_get_axis_arg__.
* scripts/plot/scatter3.m, scripts/plot/scatter.m: Update to use new
__plt_get_axis_arg__.
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Tue, 23 Jul 2013 18:31:22 +0200 |
parents | e0cd6299842c |
children | eaab03308c0b |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
13141
diff
changeset
|
1 ## Copyright (C) 2007-2012 Michael Goffioul |
6851 | 2 ## |
7016 | 3 ## This file is part of Octave. |
6851 | 4 ## |
7016 | 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 | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
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. | |
6851 | 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/>. | |
6851 | 18 |
19 ## -*- texinfo -*- | |
10793
be55736a0783
Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents:
10661
diff
changeset
|
20 ## @deftypefn {Function File} {@var{parent} =} ancestor (@var{h}, @var{type}) |
14359
7277fe922e99
doc: Use Octave preference for double quote in docstrings in scripts/
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
21 ## @deftypefnx {Function File} {@var{parent} =} ancestor (@var{h}, @var{type}, "toplevel") |
6851 | 22 ## Return the first ancestor of handle object @var{h} whose type matches |
9040
dbd0c77e575e
Cleanup documentation file plot.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
23 ## @var{type}, where @var{type} is a character string. If @var{type} is a |
6851 | 24 ## cell array of strings, return the first parent whose type matches |
25 ## any of the given type strings. | |
26 ## | |
27 ## If the handle object @var{h} is of type @var{type}, return @var{h}. | |
28 ## | |
17027 | 29 ## If @code{"toplevel"} is given as a third argument, return the highest |
6851 | 30 ## parent in the object hierarchy that matches the condition, instead |
31 ## of the first (nearest) one. | |
17027 | 32 ## @seealso{findobj, findall, allchild} |
6851 | 33 ## @end deftypefn |
34 | |
35 function p = ancestor (h, type, toplevel) | |
36 | |
17027 | 37 if (nargin < 2 || nargin > 3) |
38 print_usage (); | |
39 endif | |
40 | |
41 if (ischar (type)) | |
42 type = { type }; | |
43 elseif (! iscellstr (type)) | |
44 error ("ancestor: TYPE must be a string or cell array of strings"); | |
45 endif | |
46 | |
47 find_first = true; | |
48 if (nargin == 3) | |
49 if (ischar (toplevel) && strcmpi (toplevel, "toplevel")) | |
50 find_first = false; | |
51 else | |
52 error ('ancestor: third argument must be "toplevel"'); | |
6851 | 53 endif |
17027 | 54 endif |
55 | |
56 if (isempty (h)) | |
57 p = []; | |
58 else | |
59 p = cell (numel (h), 1); | |
60 h = num2cell (h); | |
61 for nh = 1:numel (h) | |
62 while (true) | |
63 if (isempty (h{nh}) || ! ishandle (h{nh})) | |
64 break; | |
6851 | 65 endif |
17027 | 66 if (any (strcmpi (get (h{nh}, "type"), type))) |
67 p{nh} = h{nh}; | |
68 if (find_first) | |
6851 | 69 break; |
70 endif | |
17027 | 71 endif |
72 h{nh} = get (h{nh}, "parent"); | |
73 endwhile | |
74 endfor | |
75 if (nh == 1) | |
76 p = p{1}; | |
6851 | 77 endif |
78 endif | |
79 | |
80 endfunction | |
13096 | 81 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
82 |
13096 | 83 %!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:
13096
diff
changeset
|
84 %! hf = figure ("visible", "off"); |
13141
e81ddf9cacd5
maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
13124
diff
changeset
|
85 %! unwind_protect |
17027 | 86 %! hl = line; |
87 %! assert (ancestor (hl, "axes"), gca); | |
88 %! assert (ancestor (hl, "figure"), hf); | |
13096 | 89 %! unwind_protect_cleanup |
90 %! close (hf); | |
91 %! end_unwind_protect | |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14359
diff
changeset
|
92 |
17027 | 93 %!test |
94 %! hf = figure ("visible", "off"); | |
95 %! unwind_protect | |
96 %! hg1 = hggroup ("parent", gca); | |
97 %! hg2 = hggroup ("parent", hg1); | |
98 %! hl = line ("parent", hg2); | |
99 %! assert (ancestor (hl, "line"), hl); | |
100 %! assert (ancestor (hl, "axes"), gca); | |
101 %! assert (ancestor (hl, "figure"), hf); | |
102 %! assert (ancestor (hl, "hggroup"), hg2); | |
103 %! assert (ancestor (hl, "hggroup", "toplevel"), hg1); | |
104 %! assert (ancestor (hl, {"hggroup", "axes"}), hg2); | |
105 %! assert (ancestor (hl, {"hggroup", "axes"}, "toplevel"), gca); | |
106 %! unwind_protect_cleanup | |
107 %! close (hf); | |
108 %! end_unwind_protect | |
109 | |
110 %!assert (ancestor ([], "axes"), []) | |
111 | |
112 %!error ancestor () | |
113 %!error ancestor (1,2,3) | |
114 %!error <TYPE must be a string> ancestor (1,2) | |
115 %!error <third argument must be "toplevel"> ancestor (1, "axes", "foo") | |
116 |