www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@texlistbox/set.m
function varargout=set(varargin) %TEXLISTBOX/SET Set interface for the TexListBox object % Classic set function for the TexListBox object % properties are: % % Userdata % String : Cell array of strings % Min : If Max-Min>1 then multi-select is enabled, % Max : otherwise single selection is performed. % ListBoxTop: Index of top string to display. % Callback : Callback string % Value : Vector of selected indices % % All other properties are passed through to the ListCtrl object % Copyright 2000-2013 The MathWorks, Inc. and Ford Global Technologies, Inc. % Created 4/10/00 objfind=1; while objfind if strcmpi(class(varargin{objfind}),'TexListBox') obj(objfind)=varargin(objfind); objfind=objfind+1; else varargin=varargin(objfind:end); objfind=0; end end if ~iscell(obj) obj={obj}; end for k=1:length(obj) wrkobj=obj{k}; % loop over varargin for n=1:2:(nargin-2) value=varargin{n+1}; switch lower(varargin{n}) case 'string' i_setstring(wrkobj,varargin{n+1}); case 'min' ud=get(wrkobj.xreglistctrl,'UserData'); ud.min=varargin{n+1}; ud.selmode=((ud.max-ud.min)>1); set(wrkobj.xreglistctrl,'UserData',ud); case 'max' ud=get(wrkobj.xreglistctrl,'UserData'); ud.max=varargin{n+1}; ud.selmode=((ud.max-ud.min)>1); set(wrkobj.xreglistctrl,'UserData',ud); case 'listboxtop' set(wrkobj.xreglistctrl,'top',varargin{n+1}); case 'value' i_setvalue(wrkobj,varargin{n+1}); case 'callback' if ischar(varargin{n+1}) ud=get(wrkobj.xreglistctrl,'UserData'); ud.callback=varargin{n+1}; set(wrkobj.xreglistctrl,'UserData',ud); end case 'parent' if isgraphics(varargin{n+1}) ud=get(wrkobj.xreglistctrl,'UserData'); ud.parent=varargin{n+1}; set(wrkobj.xreglistctrl,'UserData',ud); set(wrkobj.xreglistctrl,'Parent',varargin{n+1}); end case 'enable' i_setenable(wrkobj,varargin{n+1}); case 'fontsize' ud=get(wrkobj.xreglistctrl,'UserData'); ud.fonts.fontsize=varargin{n+1}; set(wrkobj.xreglistctrl,'UserData',ud); i_setel(wrkobj,'fontsize',varargin{n+1}); case 'fontname' ud=get(wrkobj.xreglistctrl,'UserData'); ud.fonts.fontname=varargin{n+1}; set(wrkobj.xreglistctrl,'UserData',ud); i_setel(wrkobj,'fontname',varargin{n+1}); otherwise set(wrkobj.xreglistctrl,varargin{n},varargin{n+1}); end end obj{k}=wrkobj; end % resurrect outputs nargout=length(obj); varargout=obj; return function i_setstring(obj,str) ud=get(obj.xreglistctrl,'UserData'); % create axestext objects. el=get(obj.xreglistctrl,'elements'); if ~iscell(str) str={str}; end N=length(str); if length(el)~=N % create new ones el=cell(N,1); vis=get(obj.xreglistctrl,'Visible'); frame = get(obj,'frame'); for n=1:N el{n}=seltext(frame,'visible',vis,'string',str{n},... 'fontsize',ud.fonts.fontsize,'fontname',ud.fonts.fontname,... 'interruptible','off','callback','cbselect(%OBJECT%,%VALUE%);',... 'verticalalignment','middle'); end set(obj.xreglistctrl,'elements',el); ud.value(ud.value>N)=[]; if isempty(ud.value) ud.value=1; end % perform "selected" highlighting i_sel(el,ud.value) else for n=1:N set(el{n},'String',str{n}); end end ud.string=str; set(obj.xreglistctrl,'UserData',ud); return function i_setvalue(obj,val) ud=get(obj.xreglistctrl,'UserData'); el=get(obj.xreglistctrl,'elements'); N=length(el); % remove selection >N val=val(val<=N); if ~ud.selmode & isempty(val) return end if ~ud.selmode val=val(1); end % select correct items i_unsel(el,setxor(1:N,val)); i_sel(el,val); if ~isempty(val) ud.multiclickind=val(end); end ud.value=val; set(obj.xreglistctrl,'UserData',ud); return function i_unsel(el,val) % unselect elements if nargin<2 val=1:length(el); end for n=val set(el{n},'Selected','off'); end return function i_sel(el,val) % select elements if nargin<2 val=1:length(el); end for n=val set(el{n},'Selected','on'); end return function i_setenable(obj,val) el=get(obj.xreglistctrl,'elements'); numel=length(el); if ischar(val) val=repmat({val},numel,1); else if length(val)~=numel error(message('mbc:texlistbox:InvalidPropertyValue')); end end % loop over seltext objects and set enable status. for n=1:numel set(el{n},'Enable',val{n}); end return function i_setel(obj,param,value); % loop over all contained test items and set the parameter el=get(obj.xreglistctrl,'elements'); for n=1:length(el) set(el{n},param,value); end return