annotate scripts/miscellaneous/getappdata.m @ 19630:0e1f5a750d00

maint: Periodic merge of gui-release to default.
author John W. Eaton <jwe@octave.org>
date Tue, 20 Jan 2015 10:24:46 -0500
parents f0dcb44826f6 446c46af4b42
children db92e7e28e1f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
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
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
11 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
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
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
18
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
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
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
30 ## @end deftypefn
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
31
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
32 ## Author: Ben Abbott <bpabbott@mac.com>
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
33 ## Created: 2010-07-15
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
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
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
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");
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
43 endif
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
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
49
18891
7bbe3658c5ef maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents: 17795
diff changeset
50 ## FIXME: Is there a better way to handle non-existent appdata
7bbe3658c5ef maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents: 17795
diff changeset
51 ## and missing fields?
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
52 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
53 appdata = struct ();
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
54 for i = 1:numel (h)
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
55 try
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
56 appdata = get (h(i), "__appdata__");
13243
f9aec0bcf826 getappdata: return empty matrix for nonexistent property names
John W. Eaton <jwe@octave.org>
parents: 13174
diff changeset
57 end_try_catch
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
58 if (isfield (appdata, name))
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
59 value(i) = {appdata.(name)};
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
60 else
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
61 value(i) = {[]};
13243
f9aec0bcf826 getappdata: return empty matrix for nonexistent property names
John W. Eaton <jwe@octave.org>
parents: 13174
diff changeset
62 endif
13174
bd2cd4fd3edf maint: use specific endif, endfor tokens instead of simple end
John W. Eaton <jwe@octave.org>
parents: 12642
diff changeset
63 endfor
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 if (i == 1)
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
66 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
67 endif
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
68
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
69 else # nargin == 1
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
70 if (numel (h) != 1)
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
71 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
72 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
73 try
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
74 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
75 catch
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
76 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
77 end_try_catch
11180
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
78 endif
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
79
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
80 endfunction
1a26199cb212 Add new appdata functions.
Ben Abbott <bpabbott@mac.com>
parents:
diff changeset
81
19298
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
82
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
83 %!test
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
84 %! unwind_protect
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
85 %! 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
86 %! assert (getappdata (0, "%data1%"), ones (3));
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
87 %! assert (getappdata (0, "%data2%"), "hello world");
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
88 %! appdata = getappdata (0);
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
89 %! name1 = "%data1%"; name2 = "%data2%";
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
90 %! assert (appdata.(name1), ones (3));
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
91 %! assert (appdata.(name2), "hello world");
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
92 %! unwind_protect_cleanup
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
93 %! rmappdata (0, "%data1%", "%data2%");
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
94 %! end_unwind_protect
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
95
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
96 ## Test input validation
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
97 %!error getappdata ()
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
98 %!error getappdata (1,2,3)
f0dcb44826f6 Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents: 18891
diff changeset
99 %!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
100 %!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
101 %!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
102