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

    function  varargout=set(obj,varargin)
%  Synopsis
%     function  set(obj,parameter,value,setChildren)
%
%  Description
%     Set the parameter of the handles. This works very similar
%     to the set methods for handles. The only difference is that
%     some methods have been overloaded to perform differently
%     on the package. Non overload methods just perform the set
%     recursively on all submembers.
%
%
%  Overloaded set methods
%     POSITION :     [xmin xmax width height] of the whole package.
%     CURRENTCARD :  current card visibility
%     NUMCARDS    :  number of cards
%     VISIBLE     : 'on' or 'off'
%     DRAWONSELECT :  'on'/'off' Always draws when card is selected
%     

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



if ~isa(obj,'xregcardlayout')
   set(mbcgui.hgclassesutil.toHandle(obj),varargin{:});
else 
   norepack = 1;
   ud=obj.g.info;
   for arg=1:2:nargin-1
      parameter = varargin{arg};
      value = varargin{arg+1};
      reqnorepack=0;
      switch upper(parameter)
      case 'POSITION'
         position=value;
         position(3:4)=max(position(3:4),[1 1]);
         set(obj.xregcontainer,'Position',position);
      case 'NUMCARDS'
         if value>0
            ud.numcards=value;
            % update drawn indicators
            cdrw=ud.carddraw;
            if value>length(cdrw)
               cdrw(end+1:value)=0;
            else
               cdrw=cdrw(1:value);
            end
            ud.carddraw=cdrw;
            
            if value<ud.currentcard
               % need to reselect 
               ud.currentcard=value;
               if ud.visible
                  % switch cards
                  if ~isempty(ud.cards)
                     onind=find(ud.cards==value);
                     el=get(obj.xregcontainer,'elements');
                     % if we need to, redraw the on cards
                     cdrw=ud.carddraw;
                     ps=get(obj.xregcontainer,'packstatus');
                     if (cdrw(value) || ud.alwaysdraw) && strcmpi(ps,'on')
                        pos=get(obj,'innerposition');
                        pos(3:4)=max(pos(3:4),[1 1]);
                        for i=onind
                           set(el{i},'Position',pos);
                        end
                        cdrw(value)=0;
                        ud.carddraw=cdrw;
                     end
                     for i=onind
                        set(el{i},'Visible','on');
                     end
                  end
               end
            end
         end
         reqnorepack=1;
      case 'CURRENTCARD'
         if value>0 && value<=ud.numcards && value~=ud.currentcard
            if ud.visible
               % switch cards
               if ~isempty(ud.cards)
                  onind=find(ud.cards==value);
                  offind=find(ud.cards==ud.currentcard);%setxor([1:length(ud.cards)],onind);
                  el=get(obj.xregcontainer,'elements');
                  for i=offind
                     set(el{i},'Visible','off');
                  end
                  % if we need to, redraw the on cards
                  cdrw=ud.carddraw;
                  ps=get(obj.xregcontainer,'packstatus');
                  if (cdrw(value) || ud.alwaysdraw) && strcmpi(ps,'on')
                     pos=get(obj,'innerposition');
                     pos(3:4)=max(pos(3:4),[1 1]);
                     for i=onind
                        set(el{i},'Position',pos);
                     end
                     cdrw(value)=0;
                     ud.carddraw=cdrw;
                  end
                  for i=onind
                     set(el{i},'Visible','on');
                  end
               end
            end
            ud.currentcard=value;
         end
         reqnorepack=1;
      case 'VISIBLE'
         vis=find( strncmp( value,{ 'off', 'on' },length(value) ) )-1;
         if ~isempty(vis) && vis~=ud.visible
            el=get(obj.xregcontainer,'elements');
            if ~isempty(ud.cards)
               cdrw=ud.carddraw;
               ps=get(obj.xregcontainer,'packstatus');
               crd=ud.currentcard;
               onind=find(ud.cards==crd);
               for i=onind
                  if vis && (cdrw(crd) || ud.alwaysdraw) && strcmpi(ps,'on')
                     pos=get(obj,'innerposition');
                     pos(3:4)=max(pos(3:4),[1 1]);
                     set(el{i},'Position',pos);
                     cdrw(crd)=0;
                  end
                  set(el{i},'Visible',value);
               end
               ud.carddraw=cdrw;
            end
            ud.visible=vis;
         end
         reqnorepack=1;
      case 'DRAWONSELECT'
         % set the always-draw flag
         ud.alwaysdraw=find( strncmp( value,{ 'off', 'on' },length(value) ) )-1;
         reqnorepack=1;
      otherwise
         [obj.xregcontainer,reqnorepack]=set(obj.xregcontainer,parameter,value);
      end
      norepack=(norepack & reqnorepack);   
   end
   obj.g.info=ud;
   if nargout>1
      varargout{1}=obj;
      varargout{2}=norepack;   
   else
      varargout{1}=obj;
      if ~norepack && get(obj,'boolpackstatus')
            repack(obj);
      end
   end  
end