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