Mercurial > octave-nkf
annotate scripts/miscellaneous/getappdata.m @ 19670:3da4b083e0b8
getappdata.m: fix output for multiple handles (bug #44097)
* getappdata.m: replace try/catch by tests on property/value structure, fix output and remove FIXME comment
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Tue, 27 Jan 2015 18:55:25 +0100 |
parents | db92e7e28e1f |
children | 4197fc428c7d |
rev | line source |
---|---|
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17122
diff
changeset
|
1 ## Copyright (C) 2010-2013 Ben Abbott |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2 ## |
17795
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
3 ## This file is part of Octave. |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
4 ## |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or |
11180 | 8 ## (at your option) any later version. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
9 ## |
17795
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, |
11180 | 11 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 ## GNU General Public License for more details. | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
14 ## |
11180 | 15 ## You should have received a copy of the GNU General Public License |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## -*- texinfo -*- | |
16491
b10a23fe80bb
doc: Tweak docstrings of functions changed for Texinfo 5.0 compatibility.
Rik <rik@octave.org>
parents:
16489
diff
changeset
|
20 ## @deftypefn {Function File} {@var{value} =} getappdata (@var{h}, @var{name}) |
16489
36dba9be680b
doc: Make documentation compatible with Texinfo 5.0 (bug #38392)
Amod Mulay <amodmulay1@gmail.com>
parents:
14868
diff
changeset
|
21 ## @deftypefnx {Function File} {@var{appdata} =} getappdata (@var{h}) |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
22 ## Return the @var{value} of the application data @var{name} for the graphics |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
23 ## object with handle @var{h}. |
19627
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
17795
diff
changeset
|
24 ## |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
25 ## @var{h} may also be a vector of graphics handles. If no second argument |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
26 ## @var{name} is given then @code{getappdata} returns a structure, |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
27 ## @var{appdata}, whose fields correspond to the appdata properties. |
17122
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
16491
diff
changeset
|
28 ## |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
29 ## @seealso{setappdata, isappdata, rmappdata, guidata, get, set, getpref, setpref} |
11180 | 30 ## @end deftypefn |
31 | |
32 ## Author: Ben Abbott <bpabbott@mac.com> | |
33 ## Created: 2010-07-15 | |
34 | |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
35 function value = getappdata (h, name) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
36 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
37 if (nargin < 1 || nargin > 2) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
38 print_usage (); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
39 endif |
11180 | 40 |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
41 if (! all (ishandle (h(:)))) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
42 error ("getappdata: H must be a scalar or vector of graphic handles"); |
19631
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19630
diff
changeset
|
43 endif |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
44 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
45 if (nargin == 2) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
46 if (! ischar (name)) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
47 error ("getappdata: NAME must be a string"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
48 endif |
19631
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19630
diff
changeset
|
49 |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
50 value = cell (numel (h), 1); |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
51 appdata = struct (); |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
52 for i = 1:numel (h) |
19670
3da4b083e0b8
getappdata.m: fix output for multiple handles (bug #44097)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
19631
diff
changeset
|
53 value{i} = []; |
3da4b083e0b8
getappdata.m: fix output for multiple handles (bug #44097)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
19631
diff
changeset
|
54 pval = get (h(i)); |
3da4b083e0b8
getappdata.m: fix output for multiple handles (bug #44097)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
19631
diff
changeset
|
55 if (isfield (pval, "__appdata__") && |
3da4b083e0b8
getappdata.m: fix output for multiple handles (bug #44097)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
19631
diff
changeset
|
56 isfield (pval.__appdata__, name)) |
3da4b083e0b8
getappdata.m: fix output for multiple handles (bug #44097)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents:
19631
diff
changeset
|
57 value{i} = pval.__appdata__.(name); |
13243
f9aec0bcf826
getappdata: return empty matrix for nonexistent property names
John W. Eaton <jwe@octave.org>
parents:
13174
diff
changeset
|
58 endif |
13174
bd2cd4fd3edf
maint: use specific endif, endfor tokens instead of simple end
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
59 endfor |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
60 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
61 if (i == 1) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
62 value = value{1}; |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
63 endif |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
64 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
65 else # nargin == 1 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
66 if (numel (h) != 1) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
67 error ("getappdata: Only one handle H may be used when fetching appdata"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
68 endif |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
69 try |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
70 value = get (h, "__appdata__"); |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
71 catch |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
72 value = struct (); |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
73 end_try_catch |
11180 | 74 endif |
75 | |
76 endfunction | |
77 | |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
78 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
79 %!test |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
80 %! unwind_protect |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
81 %! setappdata (0, "%data1%", ones (3), "%data2%", "hello world"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
82 %! assert (getappdata (0, "%data1%"), ones (3)); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
83 %! assert (getappdata (0, "%data2%"), "hello world"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
84 %! appdata = getappdata (0); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
85 %! name1 = "%data1%"; name2 = "%data2%"; |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
86 %! assert (appdata.(name1), ones (3)); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
87 %! assert (appdata.(name2), "hello world"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
88 %! unwind_protect_cleanup |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
89 %! rmappdata (0, "%data1%", "%data2%"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
90 %! end_unwind_protect |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
91 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
92 ## Test input validation |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
93 %!error getappdata () |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
94 %!error getappdata (1,2,3) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
95 %!error <H must be a scalar .* graphic handle> getappdata (-1, "hello") |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
96 %!error <NAME must be a string> getappdata (0, 1) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
97 %!error <Only one handle H may be used when fetching appdata> getappdata ([0 0]) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
98 |