www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@xregrangeinput/callback.m
function out=callback(obj,editNum) %% callback from xregrangeinput %% checks that inputs are sensible: %% min < max, max > min, pts >=1 %% looks in base workspace for non-numeric input and %% writes in a value or overwrites entire input with a vector % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. ud = get(obj.name,'UserData'); var = get(obj.edit(editNum),'String'); oldVar = {ud.min, ud.max, ud.points}; oldVar = oldVar{editNum}; newVar=oldVar; oldVector = linspace(ud.min,ud.max,ud.points); newVector=[]; if ~isempty(str2num(var)) & length(str2num(var))==1 & isreal(str2num(var)) %% constant newVar = str2num(var); else %% workspace variable (vector or const?), or rubbish try %% try base workspace new_value = evalin('base' , var); if isnumeric(new_value) & isreal(new_value) & length(new_value)>1 & length(new_value)==prod(size(new_value)) %% vector - turn into linspace - use to fill all edit boxes newVector= new_value; elseif isnumeric(new_value) & isreal(new_value) & length(new_value)==1 %% constant val - write numeric val in edit box set(obj.edit(editNum),'String',num2str(new_value)); newVar = new_value; else%% leave it as it was set(obj.edit(editNum),'String',num2str(oldVar)); end catch %% leave it as it was set(obj.edit(editNum),'String',num2str(oldVar)); end end if isempty(newVector) switch num2str(editNum) case '1' if newVar<ud.max, newVector = linspace(newVar, ud.max, ud.points); else, newVector=oldVector; end; case '2' if newVar>ud.min, newVector = linspace(ud.min, newVar, ud.points); else, newVector=oldVector; end; case '3' if newVar>0.5 , newVector = linspace(ud.min, ud.max, round(newVar)); else, newVector=oldVector; end; end end set(obj,'Value',newVector); if ~isempty(ud.callback) xregcallback(ud.callback,obj,[]); end