diff scripts/plot/private/__uiobject_split_args__.m @ 13703:22ce748da25f

Add missing UI objects: uicontextmenu, uitoolbar, uipushtool and uitoggletool. * graphics.h.in (uicontextmenu, uitoolbar, uipushtool, uitoggletool): New graphic object classes. (uicontrol::properties::cdata): Allow "single" and "uint8" data. * graphics.cc (uitoolbar): New class implementation. * gl-render.cc (opengl_renderer::draw): Skip new object types. * plot/private/__uiobject_split_args__.m: Don't use varargin. Add parent_type and use_gcf arguments. Check that number of arguments is a multiple of 2. * plot/uicontrol.m: Adapt call to __uiobject_split_args__. * plot/uipanel.m: Likewise. * plot/uimenu.m: Rewrite to use __uiobject_split_args__. * plot/uicontextmenu.m: New file. * plot/uitoolbar.m: Likewise. * plot/uipushtool.m: Likewise. * plot/uitoggletool.m: Likewise. * plot/modules.mk (plot_FCN_FILES): Add uicontextmenu.m, uitoolbar.m, uipushtool.m and uitoggletool.m.
author Michael Goffioul <michael.goffioul@gmail.com>
date Fri, 14 Oct 2011 23:19:06 +0100
parents 5ab9c721ce59
children 9cae456085c2
line wrap: on
line diff
--- a/scripts/plot/private/__uiobject_split_args__.m	Fri Oct 14 17:06:49 2011 -0400
+++ b/scripts/plot/private/__uiobject_split_args__.m	Fri Oct 14 23:19:06 2011 +0100
@@ -17,28 +17,30 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn  {Function File} {[@var{p}, @var{args}] =} __uiobject_split_args__ (@var{who}, @dots{})
+## @deftypefn  {Function File} {[@var{p}, @var{args}] =} __uiobject_split_args__ (@var{who}, @var{args}, @var{parent_type}, @var{use_gcf})
 ## @end deftypefn
 
 ## Author: goffioul
 
-function [parent, args] = __uiobject_split_args__ (who, varargin)
+function [parent, args] = __uiobject_split_args__ (who, in_args, parent_type = {}, use_gcf = 1)
 
   parent = [];
   args = {};
   offset = 1;
 
-  if (nargin > 1)
-    if (ishandle (varargin{1}))
-      parent = varargin{1};
+  if (! isempty (in_args))
+    if (ishandle (in_args{1}))
+      parent = in_args{1};
       offset = 2;
-    elseif (! ischar (varargin{1}))
+    elseif (! ischar (in_args{1}))
       error ("%s: invalid parent handle.", who);
     endif
 
-    if (nargin > offset)
-      args = varargin(offset:end);
-    endif
+    args = in_args(offset:end);
+  endif
+
+  if (rem (length (args), 2))
+    error ("%s: expecting PROPERTY/VALUE pairs", who);
   endif
 
   if (! isempty (args))
@@ -53,10 +55,11 @@
   endif
 
   if (! isempty (parent))
-    if (isempty (find (strcmpi (get (parent, "type"), {"figure", "uipanel", "uibuttongroup"}))))
-      error ("%s: invalid parent, the parent must be a figure, uipanel or uibuttongroup handle", who);
+    if (! isempty (parent_type) && isempty (find (strcmpi (get (parent, "type"), parent_type))))
+      error ("%s: invalid parent, the parent type must be: %s", ...
+             who, sprintf ("%s, ", parent_type{:})(1:end-2));
     endif
-  else
+  elseif (use_gcf)
     parent = gcf ();
   endif