# HG changeset patch # User Michael Goffioul # Date 1318543304 -3600 # Node ID dd9b32af0a018c374b6e891ce34ba3794689cf35 # Parent 276bb0dd9d24eb9e0805380a682f3b4a4c9ac5c8 Implement guidata/guihandles. * graphics.h.in (figure::properties::__guidata__): New hidden property. * plot/modules.mk (plot_FCN_FILES): Add guidata.m and guihandles.m. * plot/guidata.m: New file. * plot/guihandles.m: Likewise. diff -r 276bb0dd9d24 -r dd9b32af0a01 scripts/plot/guidata.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/plot/guidata.m Thu Oct 13 23:01:44 2011 +0100 @@ -0,0 +1,52 @@ +## Copyright (C) 2011 Michael Goffioul +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{data} =} guidata (@var{handle}) +## @deftypefnx {Function File} guidata (@var{handle}, @var{data}) +## @end deftypefn + +## Author: goffioul + +function varargout = guidata (varargin) + + if (nargin == 1 || nargin == 2) + h = varargin{1}; + if (ishandle (h)) + h = ancestor (h, "figure"); + if (! isempty (h)) + if (nargin == 1) + varargout{1} = get (h, "__guidata__"); + else + data = varargin{2}; + set (h, "__guidata__", data); + if (nargout == 1) + varargout{1} = data; + endif + endif + else + error ("no ancestor figure found"); + endif + else + error ("invalid object handle"); + endif + else + print_usage (); + endif + +endfunction diff -r 276bb0dd9d24 -r dd9b32af0a01 scripts/plot/guihandles.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/plot/guihandles.m Thu Oct 13 23:01:44 2011 +0100 @@ -0,0 +1,70 @@ +## Copyright (C) 2011 Michael Goffioul +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or (at +## your option) any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {@var{hdata} =} guihandles (@var{handle}) +## @deftypefnx {Function File} {@var{hdata} =} guihandles +## @end deftypefn + +## Author: goffioul + +function hdata = guihandles (varargin) + + hdata = []; + + if (nargin == 0 || nargin == 1) + if (nargin == 1) + h = varargin{1}; + if (ishandle (h)) + h = ancestor (h, "figure"); + if (isempty (h)) + error ("no ancestor figure found"); + endif + else + error ("invalid object handle"); + endif + else + h = gcf (); + endif + hdata = __make_guihandles_struct__ (h, hdata); + else + print_usage (); + endif + +endfunction + +function hdata = __make_guihandles_struct__ (h, hdata) + + tag = get (h, "tag"); + if (! isempty (tag)) + if (isfield (hdata, tag)) + hdata.(tag) = [hdata.(tag), h]; + else + try + hdata.(tag) = h; + catch + end_try_catch + endif + endif + + kids = allchild (h); + for i = 1 : length (kids) + hdata = __make_guihandles_struct__ (kids(i), hdata); + endfor + +endfunction diff -r 276bb0dd9d24 -r dd9b32af0a01 scripts/plot/module.mk --- a/scripts/plot/module.mk Thu Oct 13 13:38:19 2011 -0400 +++ b/scripts/plot/module.mk Thu Oct 13 23:01:44 2011 +0100 @@ -109,6 +109,8 @@ plot/graphics_toolkit.m \ plot/grid.m \ plot/gtext.m \ + plot/guidata.m \ + plot/guihandles.m \ plot/hggroup.m \ plot/hidden.m \ plot/hist.m \ diff -r 276bb0dd9d24 -r dd9b32af0a01 src/graphics.h.in --- a/src/graphics.h.in Thu Oct 13 13:38:19 2011 -0400 +++ b/src/graphics.h.in Thu Oct 13 23:01:44 2011 +0100 @@ -3165,6 +3165,7 @@ radio_property xvisualmode , "{auto}|manual" callback_property buttondownfcn , Matrix () string_property __graphics_toolkit__ s , "gnuplot" + any_property __guidata__ h , Matrix () END_PROPERTIES protected: