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);