www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@listitemselector/set.m
function varargout=set(varargin) % SET Set interface for the listitemselector object % % [SL1,SL2,SL3]=SET(SL1,SL2,SL3,...,'Property','Value',...) sets the properties % to the values indicated. Current properties include: % 'Visible' - 'on'/'off' % 'Position' - 4 element position vector % 'Parent' - Re-parent object % 'Enable' - 'on'/'off' % 'Buttonsep' - spacing between the buttons and the list boxes % 'itemlist' - list of strings or numbers to select from % 'selectionstyle' - 'single' or 'multiple' % 'selectedtitle' - Title string to put over the selected listbox % 'unselectedtitle' - Title string to put over the unselected listbox % 'callback' - Callback string to evaluate whenever the selection is % changed. % 'userdata' - Field for storing data % 'selectfcn' - String to evaluate whenever an item is selected in either % list. % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. % sort out inputs: objfind=1; while objfind if strcmp(class(varargin{objfind}),'listitemselector') sl(objfind)=varargin(objfind); objfind=objfind+1; else varargin=varargin(objfind:end); objfind=0; end end if ~iscell(sl) sl={sl}; end for k=1:length(sl) wrksl=sl{k}; for n=1:2:length(varargin)-1 switch lower(varargin{n}) case 'visible' % visible if strcmpi(varargin{n+1},'off') set([wrksl.baselist;wrksl.sellist;wrksl.addall;wrksl.addone;wrksl.remone;... wrksl.remall;wrksl.unselttl;wrksl.selttl],'Visible','off'); elseif strcmpi(varargin{n+1},'on') ud=get(wrksl.baselist,'UserData'); hndls=[wrksl.baselist;wrksl.sellist;wrksl.addall;wrksl.addone;wrksl.remone;wrksl.remall]; if ud.titles hndls=[hndls;wrksl.unselttl;wrksl.selttl]; end set(hndls,'Visible','on'); end case 'position' % position i_position(wrksl,varargin{n+1}); case 'parent' % check for a figure handle if mbcgui.util.isComponentParent(varargin{n+1}) set([wrksl.baselist;wrksl.sellist;wrksl.addall;wrksl.addone;wrksl.remone;wrksl.remall],'Parent',varargin{n+1}); end case 'enable' % enable if strcmp(varargin{n+1},'on') h=[wrksl.baselist;wrksl.sellist]; ud=get(wrksl.baselist,'UserData'); if ~isempty(ud.sel) h=[h; wrksl.remone;wrksl.remall]; end if ~isempty(ud.unsel) h=[h; wrksl.addone;wrksl.addall]; end set(h,'Enable','on'); elseif strcmp(varargin{n+1},'off') set([wrksl.baselist;wrksl.sellist;wrksl.addall;wrksl.addone;wrksl.remone;wrksl.remall],'Enable','off'); end case 'buttonsep' ud=get(wrksl.baselist,'UserData'); ud.buttonsepdist=varargin{n+1}; set(wrksl.baselist,'UserData',ud); i_position(wrksl,ud.position); case 'itemlist' val=get(wrksl.baselist,'Value'); if val>length(varargin{n+1}) set(wrksl.baselist,'Value',1); end ud=get(wrksl.baselist,'UserData'); ud.reallist=varargin{n+1}; ud.sel=[]; ud.unsel=1:length(ud.reallist); % convert input to character representation if necessary if isnumeric(varargin{n+1}) ud.charlist=ud.reallist; elseif iscell(varargin{n+1}) % attempt to convert cell array of objects using char ud.charlist=ud.reallist; for n=1:length(ud.reallist) try ud.charlist{n}=char(ud.charlist{n}); catch ud.charlist{n}='????'; end end end set(wrksl.baselist,'String',ud.charlist); set(wrksl.sellist,'String','','Value',1); set(wrksl.baselist,'UserData',ud); % disable removal buttons set([wrksl.remone,wrksl.remall],'Enable','off'); if ~isempty(ud.unsel) set([wrksl.addone,wrksl.addall],'Enable','on'); end case 'selectionstyle' if strcmp(varargin{n+1},'single') set([wrksl.baselist;wrksl.sellist],'Max',1,'Min',0); elseif strcmp(varargin{n+1},'multiple') set([wrksl.baselist;wrksl.sellist],'Max',2,'Min',0); end case 'selectedtitle' if ischar(varargin{n+1}) set(wrksl.selttl,'String',varargin{n+1}); ud=get(wrksl.baselist,'UserData'); ttls=ud.titles; if isempty(varargin{n+1}) if isempty(get(wrksl.unselttl,'String')) ud.titles=0; else ud.titles=1; end else ud.titles=1; end set(wrksl.baselist,'UserData',ud); if ttls~=ud.titles % force a redraw i_position(wrksl,get(wrksl,'Position')); end end case 'unselectedtitle' if ischar(varargin{n+1}) set(wrksl.unselttl,'String',varargin{n+1}); ud=get(wrksl.baselist,'UserData'); ttls=ud.titles; if isempty(varargin{n+1}) if isempty(get(wrksl.selttl,'String')) ud.titles=0; else ud.titles=1; end else ud.titles=1; end set(wrksl.baselist,'UserData',ud); if ttls~=ud.titles % force a redraw i_position(wrksl,get(wrksl,'Position')); end end case 'callback' ud=get(wrksl.baselist,'UserData'); ud.callback=varargin{n+1}; set(wrksl.baselist,'UserData',ud); case 'userdata' ud=get(wrksl.baselist,'UserData'); ud.userdata=varargin{n+1}; set(wrksl.baselist,'UserData',ud); case 'selectfcn' ud=get(wrksl.baselist,'UserData'); ud.selectfcn=varargin{n+1}; set(wrksl.baselist,'UserData',ud); otherwise set([wrksl.baselist;wrksel.sellist],varargin{n},varargin{n+1}); end end sl{k}=wrksl; end % resurrect outputs varargout=sl; return function i_position(sl,pos) ud=get(sl.baselist,'UserData'); rpos=pos; if ud.titles % reserve 18 pixels for titles pos(4)=pos(4)-16; end % decide btn heights and separations if pos(4)<154 btnsep=floor(pos(4)./15.4); btnh=floor(btnsep.*2.6); else btnh=26; btnsep=10; end if pos(3)<(btnh+2*ud.buttonsepdist+2) || btnh<1 return end vis=get(sl.baselist,'Visible'); set([sl.baselist;sl.sellist;sl.addall;sl.addone;sl.remone;sl.remall;sl.unselttl;sl.selttl],'Visible','off'); set(sl.baselist,'Position',[pos(1) pos(2) (pos(3)-btnh-2*ud.buttonsepdist)./2 pos(4)]); set(sl.sellist,'Position',[pos(1)+pos(3)./2+ud.buttonsepdist+btnh./2 pos(2) (pos(3)-btnh-2*ud.buttonsepdist)./2 pos(4)]); set(sl.addall,'Position',[pos(1)+.5*pos(3)-.5*btnh pos(2)+.5*pos(4)+1.5*btnsep btnh btnh]); set(sl.addone,'Position',[pos(1)+pos(3)./2-btnh./2 pos(2)+.5*pos(4)+2.5*btnsep+btnh btnh btnh]); set(sl.remone,'Position',[pos(1)+pos(3)./2-btnh./2 pos(2)+.5*pos(4)-1.5*btnsep-btnh btnh btnh]); set(sl.remall,'Position',[pos(1)+pos(3)./2-btnh./2 pos(2)+.5*pos(4)-2.5*btnsep-2*btnh btnh btnh]); set(sl.selttl,'Position',[pos(1)+pos(3).*0.5+10+btnh.*0.5 pos(2)+pos(4) (pos(3)-btnh-20).*0.5 16]); set(sl.unselttl,'Position',[pos(1) pos(2)+pos(4) (pos(3)-btnh-20).*0.5 16]); if strcmp(vis,'on') hndls=[sl.baselist;sl.sellist;sl.addall;sl.addone;sl.remone;sl.remall]; if ud.titles hndls=[hndls;sl.selttl;sl.unselttl]; end set(hndls,'Visible','on'); end ud.position=rpos; set(sl.baselist,'UserData',ud); return