www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph2d/factor_change.m

    function factor_change(gr,obj)
%FACTOR_CHANGE Callback function
%   Callback function for the graph2d object

%  Copyright 2000-2011 The MathWorks, Inc. and Ford Global Technologies, Inc.


% check exclusive setting
ud = gr.DataPointer.info;
if ud.factorselection==1
    % need to make sure the other selections aren't the same
    if nargin<2
        obj=gcbo;
    end
    dir=str2num(get(obj,'Tag'));
    vals=get([gr.xfactor;gr.yfactor],{'Value'});
    vals=cat(1,vals{:});
    val=vals(dir);
    reps=find(vals==val);
    if length(reps)>1
        flds={'xfactor','yfactor'};
        chng=setxor(reps,dir);
        hndl=gr.(flds{chng});
        % find a new value to set it to
        used=vals;
        avail=1:4;
        new=setxor(used,avail);
        new=new(1);
        str=get(gr.xfactor,'String');
        if new<=length(str)
            set(hndl,'Value',new)
        end
    end
end

pr_graphlim(gr);

% put data into line object
pr_plot(gr);

%----------------------
%  fire user callback
%----------------------
if ~isempty(ud.callback)
    if ischar(ud.callback)
        % Legacy support for tokens in the string: %XVALUE%, %OBJECT%, %YVALUE%   
        pcs=strfind(ud.callback,'%');
        go=1;
        needobj=0;
        needxval=0;
        needyval=0;
        while (go<=(length(pcs)-1))
            cmp=ud.callback(pcs(go)+1:pcs(go+1)-1);
            if strcmp(cmp,'XVALUE')
                needxval=1;
                ud.callback=[ud.callback(1:pcs(go)-1) 'XX_XVALUE_XX' ud.callback(pcs(go+1)+1:end)];
                go=go+2;
                pcs=pcs+4;
            elseif strcmp(cmp,'YVALUE')
                needyval=1;
                ud.callback=[ud.callback(1:pcs(go)-1) 'XX_YVALUE_XX' ud.callback(pcs(go+1)+1:end)];
                go=go+2;
                pcs=pcs+4;   
            elseif strcmp(cmp,'OBJECT')
                needobj=1;
                ud.callback=[ud.callback(1:pcs(go)-1) 'XX_OBJECT_XX' ud.callback(pcs(go+1)+1:end)];
                go=go+2;
                pcs=pcs+4;
            else
                go=go+1;
            end
        end
        
        if needobj
            assignin('base','XX_OBJECT_XX',gr);
        end
        if needxval
            assignin('base','XX_XVALUE_XX',get(gr.xfactor,'Value'));
        end
        if needyval
            assignin('base','XX_YVALUE_XX',get(gr.yfactor,'Value'));
        end
        
        evalin('base',ud.callback);
        
        % clear up base workspace
        evalin('base','clear(''XX_OBJECT_XX'',''XX_XVALUE_XX'',''XX_YVALUE_XX'');'); 
    else
        xregcallback(ud.callback, gr, struct('xvalue', get(gr.xfactor,'Value'), 'yvalue',get(gr.yfactor,'Value')));
    end
end
return