www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@cset_ccd/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-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. switch lower(action) case 'layout' out=i_createlyt(obj, varargin{:}); case 'update' out=i_update(varargin{:}); case 'enable' out=i_setenable(varargin{:}); end function lyt = i_createlyt(obj, figh,varargin) % create new layout in figure pUD = xregGui.RunTimePointer; ud.pointer = []; ud.figure = figh; ud.model = []; ud.callback = ''; for n=1:2:length(varargin) switch lower(varargin{n}) case 'callback' ud.callback = varargin{n+1}; end end ud.cpedt=mbcgui.widget.Spinner('Parent', figh,... 'Min',1,... 'Max',20,... 'ClickIncrement',1,... 'Rule','int', ... 'Callback',{@i_cpchng,pUD}); ud.cptxt=xregGui.labelcontrol('parent',figh,... 'LabelSizeMode','absolute',... 'LabelSize',130,... 'ControlSizeMode','absolute',... 'ControlSize',70,... 'gap',5,... 'string','Number of center points:',... 'Control',ud.cpedt); [ud.RangeTable, ud.RangeTableUpdate] = pRangeEditor(obj, figh, ... ud.pointer, ud.model, ud.callback); ud.RangeLabel = uicontrol('Parent',figh, ... 'Style', 'text', ... 'HorizontalAlignment', 'left', ... 'String', 'Range of values and custom star point location:'); ud.aopts=xregGui.rbgroup(figh,... 'nx',1,'ny',4,... 'value',[1; 0; 0; 0],... 'string',{'Face center cube';'Spherical';'Rotatable';'Custom (edit values in table)'}, ... 'callback',{@i_aopts,pUD}); ud.ALabel = uicontrol('Parent',figh, ... 'Style', 'text', ... 'HorizontalAlignment', 'left', ... 'String', 'Star point position:'); ud.inscribe=uicontrol('Parent',figh,... 'Style','checkbox',... 'String','Inscribe star points',... 'Callback',{@i_setinscr,pUD}); % Add a column for the custom alpha values ud.RangeTable.ValueColumnCount = ud.RangeTable.ValueColumnCount+1; ud.RangeTable.ValueColumnHeader = [ud.RangeTable.ValueColumnHeader, {'Alpha'}]; ud.LevelsListener = handle.listener(ud.RangeTable, 'VariableChanged', {@iAlphaChange, pUD}); lyt = xreggridbaglayout(figh, ... 'userdata', pUD, ... 'dimension', [9 2], ... 'rowsizes', [20 10 15 80 10 15 10 15 -1], ... 'colsizes', [15 -1], ... 'mergeblock', {[1 1], [1 2]}, ... 'mergeblock', {[3 3], [1 2]}, ... 'mergeblock', {[6 6], [1 2]}, ... 'mergeblock', {[8 8], [1 2]}, ... 'mergeblock', {[9 9], [1 2]}, ... 'elements', {ud.cptxt, [], ud.ALabel, [], [], ud.inscribe, ... [], ud.RangeLabel, ud.RangeTable, ... [], [], [], ud.aopts}); ud.layout=lyt; pUD.info = ud; % External update function. function lyt=i_update(lyt,p,m) % update current layout pUD = get(lyt,'UserData'); ud = pUD.info; ud.pointer = p; ud.model = m; ud = i_setvalues(ud); pUD.info = ud; function ud=i_setvalues(ud) cs = ud.pointer.info; set(ud.cpedt,'Value',get(cs,'numcenter')); % Set up the range table ud.RangeTableUpdate(ud.pointer, ud.model); a = get(cs,'alpha'); nf = nfactors(cs); % look for face center, spherical, rotatable AlphaVals = cell(nf,1); AlphaTypes = zeros(nf,1); if all(a==1) set(ud.aopts,'Selected',1); elseif all(abs(a-sqrt(nf))<1e-10) set(ud.aopts,'Selected',2); elseif all(abs(a-(2^(nf/4)))<1e-10) % rotatable if a= 2^(nf/4) set(ud.aopts,'Selected',3); else set(ud.aopts,'Selected',4); AlphaVals = num2cell(a(:)); AlphaTypes(:) = 1; end ud.RangeTable.setValueColumn('Alpha', AlphaVals, AlphaTypes); in = get(cs,'inscribe'); if strcmp(in,'on') set(ud.inscribe,'Value',1); else set(ud.inscribe,'Value',0); end function lyt=i_setenable(lyt,state) pUD = get(lyt,'UserData'); ud = pUD.info; set(ud.cptxt,'Enable',state); set(ud.RangeTable, 'Enable', state); set(ud.aopts,'Enable',state); set(ud.inscribe,'Enable',state); function i_cpchng(obj,nul,pUD) ud = pUD.info; val = get(ud.cpedt,'Value'); ud.pointer.info = set(ud.pointer.info,'numcenter',val); pUD.info = ud; i_firecb(ud); function iAlphaChange(src, evt, pUD) if ~src.isEventInColumn(evt, 'Alpha') return end a = src.getValueColumn('Alpha'); a = [a{:}]; ud = pUD.info; if all(isfinite(a)) && all(a>=1) ud.pointer.info = set(ud.pointer.info,'alpha',a); i_firecb(ud); else a = get(ud.pointer.info,'alpha'); end AlphaVals = num2cell(a(:)); ud.RangeTable.setValueColumn('Alpha', AlphaVals); pUD.info = ud; function i_aopts(obj,nul,pUD) ud = pUD.info; cs = ud.pointer.info; a = get(cs,'alpha'); sel = get(obj,'Selected'); if sel==4 AlphaTypes = ones(size(a(:))); else if sel==1 val = 1; elseif sel==2 val = sqrt(nfactors(ud.pointer.info)); elseif sel==3 val = 2^(nfactors(ud.pointer.info)/4); end a(:) = val; cs = set(cs,'alpha',a); ud.pointer.info = cs; AlphaTypes = zeros(size(a(:))); end AlphaVals = num2cell(a(:)); ud.RangeTable.setValueColumn('Alpha', AlphaVals, AlphaTypes); i_firecb(ud); function i_setinscr(obj,nul,pUD) ud = pUD.info; cs = ud.pointer.info; sel = get(obj,'Value'); if sel cs = set(cs,'inscribe','on'); else cs = set(cs,'inscribe','off'); end ud.pointer.info = cs; i_firecb(ud); function i_firecb(ud) xregcallback(ud.callback,ud.layout,[]);