www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@xregstepinput/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) prop = lower(varargin{i}); new_value = varargin{i+1}; switch prop case 'position' iSetPosition(new_value,obj); case 'visible' iSetVisible(obj,new_value); case 'parent' iSetParent(obj,new_value); case 'userdata' iSetUserData(new_value,obj); case 'callback' iSetCallback(new_value,obj); case 'enable' iSetEnable(new_value,obj); case 'vec_range' iSetVec_Range(new_value,obj); case 'range' iSetRange(new_value,obj); case 'numsteps' iSetNumSteps(new_value,obj); case 'value' iSetValue(new_value,obj); 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.UserData = 'Anything.'; out.Range = '{ [new range] , number of points}'; function i_EnableButtons(obj,d) % set enable status and cdata for left and right buttons depending % on position within range if d.index == 1 || ~d.enable set(obj.leftbutton , 'Enable' , 'off' , 'CData' , d.LeftDis); else set(obj.leftbutton , 'Enable' , 'on' , 'CData' , d.LeftEn); end if d.index == length(d.range) || ~d.enable set(obj.rightbutton , 'Enable' , 'off' , 'CData' , d.RightDis); else set(obj.rightbutton , 'Enable' , 'on' , 'CData' , d.RightEn); end function iSetPosition(new_value,obj) if ~isnumeric(new_value) || length(new_value) ~= 4 error(message('mbc:xregstepinput:InvalidPropertyValue')); end butWidth = 20; editWidth = 50; left_over = new_value(3)-2*butWidth-editWidth; Pos1 = [new_value(1) new_value(2) left_over new_value(4)]; Pos2 = [new_value(1)+left_over new_value(2) butWidth new_value(4)]; Pos3 = [new_value(1)+left_over+butWidth new_value(2) editWidth new_value(4)]; Pos4 = [new_value(1)+left_over+butWidth+editWidth new_value(2) butWidth 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; if Pos3(3) < 1; Pos3(3) = 1; end; if Pos3(4) < 1; Pos3(4) = 1; end; if Pos4(3) < 1; Pos4(3) = 1; end; if Pos4(4) < 1; Pos4(4) = 1; end; set(obj.text , 'Position' , Pos1); set(obj.leftbutton, 'Position' , Pos2); set(obj.edit , 'Position' , Pos3); set(obj.rightbutton , 'Position' , Pos4); function iSetVisible(obj,new_value) vec = [obj.text obj.leftbutton obj.edit obj.rightbutton]; switch upper(new_value) case 'ON' set(vec , 'Visible' , 'on'); case 'OFF' set(vec , 'Visible' , 'off'); end function iSetParent(obj,new_value) if ~isgraphics(new_value , 'figure') error(message('mbc:xregstepinput:InvalidPropertyValue1')); end vec = [obj.text obj.leftbutton obj.edit obj.rightbutton]; set(vec , 'Parent' , new_value); set(obj.text , 'BackgroundColor' , get(new_value , 'Color')); function iSetVec_Range(new_value,obj) if ~isnumeric(new_value) || length(new_value)<1 error(message('mbc:xregstepinput:InvalidPropertyValue2')); end d = get(obj.edit , 'UserData'); d.range = new_value; d.index = floor(length(new_value)/2); d.currstr = num2str(d.range(d.index)); set(obj.edit , 'String' , num2str(d.range(d.index))); set(obj.edit , 'UserData' , d); i_EnableButtons(obj,d); function iSetEnable(new_value,obj) if ~ischar(new_value) || (~strcmp(new_value,'on') && ~strcmp(new_value,'off')) error(message('mbc:xregstepinput:InvalidPropertyValue3')); end set([obj.edit obj.leftbutton obj.rightbutton],'Enable',new_value); d = get(obj.edit , 'UserData'); d.enable = strcmp(new_value,'on'); set(obj.edit , 'UserData' , d); i_EnableButtons(obj,d); function iSetRange(new_value,obj) if ~iscell(new_value) error(message('mbc:xregstepinput:InvalidPropertyValue4')); end rng = new_value{1}; num = new_value{2}; if ~isnumeric(rng) || length(rng) ~= 2 || diff(rng) <= 0 error(message('mbc:xregstepinput:InvalidPropertyValue5')); end d = get(obj.edit , 'UserData'); d.range = linspace(rng(1) , rng(end) , num); d.index = floor(num/2); d.currstr = num2str(d.range(d.index)); set(obj.edit , 'String' , num2str(d.range(d.index))); set(obj.edit , 'UserData' , d); i_EnableButtons(obj,d); function iSetNumSteps(new_value,obj) if ~isnumeric(new_value) || ~isscalar(new_value) error(message('mbc:xregstepinput:InvalidPropertyValue6')); end new_value = round(new_value); if new_value<2 return end num = new_value; d = get(obj.edit , 'UserData'); d.range = linspace(d.range(1) , d.range(end) , num); [~, ind]=min(abs(d.range - str2num(d.currstr))); d.index = max(1,min(ind(1),num)); set(obj.edit , 'UserData' , d); function iSetValue(new_value,obj) d = get(obj.edit , 'UserData'); if new_value < d.range(1) || new_value > d.range(end) || length(new_value) > 1 else [y,index]=min(abs(d.range-new_value)); d.index = index(end); d.currstr = num2str(new_value); set(obj.edit , 'String' , num2str(new_value)); i_EnableButtons(obj,d); end set(obj.edit , 'UserData' , d); function iSetCallback(new_value,obj) d = get(obj.edit , 'UserData'); d.callback = new_value; set(obj.edit , 'UserData' , d); function iSetUserData(new_value,obj) d = get(obj.edit , 'UserData'); d.UserData = new_value; set(obj.edit , 'UserData' , d);