www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@cset_stratlhs/propertypage.m

    function out=propertypage(obj,action,varargin)
%PROPERTYPAGE Create a property gui for CandidateSet
%
%   This should be overloaded by child classes
%
%   Interface:  Lyt=propertypage(cs,'layout',fig);
%               Lyt=propertypage(cs,'update',lyt,p_cs,model);
%               Lyt=propertypage(cs,'enable',lyt,enstate);

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


switch lower(action)
    case 'layout'
        out=i_createlyt(obj, varargin{:});
    case 'update'
        out = propertypage(obj.cset_lhs, action, varargin{:});
        i_update(varargin{1});
    otherwise
        if nargout
            out = propertypage(obj.cset_lhs, action, varargin{:});
        else
            propertypage(obj.cset_lhs, action, varargin{:});
        end
end



function lyt =i_createlyt(obj, figh,varargin)

% Create the standard cset_lhs layout, then modify the range table to add the
% controls that allow stratification.
lyt = propertypage(obj.cset_lhs, 'layout', figh, varargin{:});

pUD = get(lyt, 'UserData');
ud = pUD.info;

ud.RangeTable.ValueColumnCount = ud.RangeTable.ValueColumnCount+2;
ud.RangeTable.ValueColumnHeader = [ud.RangeTable.ValueColumnHeader, {'Stratify', 'Levels'}];
ud.StratifyListener = handle.listener(ud.RangeTable, 'VariableChanged', {@iStratChange, pUD}); 
pUD.info = ud;


function lyt = i_update(lyt)
pUD = get(lyt, 'UserData');
% update current layout
ud = pUD.info;
ud = i_setvalues(ud);
pUD.info = ud;


function ud = i_setvalues(ud)
% Stratification
strat = get(ud.pointer.info,'stratifylevels');
DoStrat = strat>0;

TableVals = [num2cell(DoStrat(:)), num2cell(strat(:))];
TableType = zeros(size(TableVals));
TableType(:,1) = 5;
TableType(DoStrat,2) = 1;

ud.RangeTable.setValueColumn({'Stratify', 'Levels'}, TableVals, TableType);



% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % Callbacks from each object %
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function iStratChange(src, evt, pUD)
if ~src.isEventInColumn(evt, {'Stratify', 'Levels'})
    return
end

DoStrat = src.getValueColumn('Stratify');
StratVals = src.getValueColumn('Levels');
DoStrat = [DoStrat{:}];
StratVals = [StratVals{:}];

ud = pUD.info;
if all(isfinite(StratVals))
    % If a checkbox has been checked, set the number of levels to 5 by
    % default
    StratVals(StratVals==0 & DoStrat) = 5;

    % Make sure level numbers are all OK
    StratVals = round(StratVals);
    StratVals(StratVals<2) = 2;
    StratVals(~DoStrat) = 0;

    OldStrat = get(ud.pointer.info, 'stratifylevels');
    if ~isequal(OldStrat, StratVals)
        ud.pointer.info = set(ud.pointer.info,'stratifylevels',StratVals);
    end
end

ud = i_setvalues(ud);
pUD.info = ud;

xregcallback(ud.callback);