www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@popupinput/set.m

    function varargout = set(obj , varargin)
%SET

%  Copyright 2000-2013 The MathWorks, Inc. and Ford Global Technologies, Inc.



if nargin==1
   varargout{1} = i_ShowFields;
else
   for i = 1:2:length(varargin)
      property = lower(varargin{i});
      new_value = varargin{i+1};
      
      switch property
          case 'position'
              iSetPosition(new_value,obj);
          case 'visible'
              iSetVisible(new_value,obj);
          case 'parent'
              iSetParent(obj,new_value);
          case 'split'
              iSetSplit(new_value,obj);
          case 'userdata'
              d=get(obj.popup , 'UserData');
              d.UserData = new_value;
              set(obj.popup , 'UserData' , d);
          case 'callback'
              d=get(obj.popup , 'UserData');
              d.callback = new_value;
              set(obj.popup , 'UserData' , d);
          case 'string'
              d=get(obj.popup , 'UserData');
              d.string = new_value;
              set(obj.popup , 'String' , new_value , 'UserData' , d);
          case 'value'
              set(obj.popup , 'Value' , new_value );
      end
   end
   if nargout > 0
      varargout{1} = obj;
   elseif ~isempty(inputname(1))
      assignin('caller' , inputname(1) , obj);
   end
end

function out = i_ShowFields
out.Position = '[1x4] Position Array.';
out.Visible = '{on|off}';
out.Parent = '[1x1] Figure Handle';
out.Callback = 'String';
out.UserData = 'Anything.';

function iSetPosition(new_value,obj)
if ~isnumeric(new_value) || length(new_value) ~= 4
   error(message('mbc:popupinput:InvalidPropertyValue'));
end
d = get(obj.popup , 'UserData');
s = d.split; s2 = 1-s;
Pos1 = [new_value(1) new_value(2) s*new_value(3) new_value(4)];
Pos2 = [new_value(1)+s*new_value(3) new_value(2) s2*new_value(3) new_value(4)];

if Pos1(3) < 1; Pos1(3) = 1; end;
if Pos1(4) < 1; Pos1(4) = 1; end;
if Pos2(3) < 1; Pos2(3) = 1; end;
if Pos2(4) < 1; Pos2(4) = 1; end;

set(obj.text , 'Position' , Pos1);
set(obj.popup , 'Position' , Pos2);

function iSetVisible(new_value,obj)
switch upper(new_value)
    case 'ON'
        set([obj.text obj.popup] , 'Visible' , 'on');
    case 'OFF'
        set([obj.text obj.popup] , 'Visible' , 'off');
end

function iSetParent(obj,new_value)
if ~isgraphics(new_value, 'figure')
   error(message('mbc:popupinput:InvalidPropertyValue1'));
end
set([obj.text obj.popup] , 'Parent' , new_value);
set(obj.text , 'BackgroundColor' , get(new_value , 'Color'));

function iSetSplit(new_value,obj)
if ~isnumeric(new_value) || isscalar(new_value) || new_value<0 || new_value>1
   error(message('mbc:popupinput:InvalidPropertyValue2'));
end
d=get(obj.popup , 'UserData');
d.split = new_value;
set(obj.popup , 'UserData' , d);
p1 = get(obj.text, 'Position');
p2 = get(obj.popup, 'Position');
pos = [p1(1) p1(2) p1(3)+p2(3) p1(4)];
set(obj, 'Position',pos);