www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/+cgcalsetup/ModelPage.m
classdef ModelPage < cgcalsetup.WizardPage %MODELPAGE wizard page to select model to create items from. % % cgcalsetup.ModelPage methods: % updatePage - update wizard page with data % updateData - update data from wizard page % createPage - create page for wizard (Static) % getNextPage - function handle for next page % Copyright 2009-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (Access=protected) %HDATASET checkbox for creating dataset hDataset %MODELIST java table for models ModelList end methods function updateData(M) %UPDATEDATA update model data from ModelPage wizard C = M.Data; ModelNum = M.ModelList.getSelectedRows; % find node pointer A = C.Project.getConnections; ind = find(A, 'name',C.pModelList(ModelNum).getname); C.pModelNode = A.pNode(ind); C.CreateDataset = get(M.hDataset,'Value'); end function updatePage(M,iFace) %UPDATEPAGE update wizard page to select model C = M.Data; InfoStr = C.Description; set(M.hInfoPane,'InfoString',InfoStr); % set checkboxes set(M.hDataset,'Value',C.CreateDataset) pAllModels = C.pModelList; AllModelNames = pveceval(pAllModels,@getname)'; % fill table with list of models Icons = pveceval(pAllModels,@iconfile)'; Types = pveceval(pAllModels,@gettype)'; pInports = pveceval(pAllModels,@getinports)'; ModelInputs = cell(1,length(pAllModels)); for i=1:length(pAllModels) Icons{i} = cgrespath(Icons{i}); ModelInputs{i} = mbcListString( pveceval(pInports{i},@getname), ' ' ); end M.ModelList.Peer.setColumnWidths([150 100 150]); M.ModelList.Peer.setData( [AllModelNames(:) Types(:) ModelInputs(:)]); M.ModelList.Peer.setIconData(Icons , 0); if ~isempty(C.pModelNode) row = find(strcmp(getname(C.Model),AllModelNames )); else row = 1; end M.ModelList.selectRows(row); % call change to selection callback to make sure the page is % correctly enabled changeSelection([],[],M,iFace) end end methods (Access=protected) function M = ModelPage(fh,iFace,C) M.Data = C; M.Layout = createLayout(M,fh,iFace); updatePage(M,iFace) end function MainLyt = createLayout(M,fh,iFace) %createLayout create main layout for model page % % MainLyt = createLayout(M,fh,iFace) M.hDataset=uicontrol('Parent',fh,... 'Style','checkbox',... 'Tag','OpPointDataset',... 'String','Create operating point data set'); modellist = mbcwidgets.Table1D( 'list',... 'parent', fh,... 'SelectionMode', 'SingleRow'); modellist.Peer.setColumnData( {'Model','Type','Variable Inputs'} ); M.ModelList = modellist; MainLyt=xreggridbaglayout(fh,'dimension',[2 1],... 'rowsizes',[-1 15],... 'gapx', 20, ... 'gapy',5,... 'border',[10 10 10 10],... 'elements',{modellist,M.hDataset}); M.hInfoPane = mbcgui.container.InfoPane('Parent', fh, ... 'InfoHeight', 35, ... 'Title','Model',... 'Center', MainLyt); MainLyt = xreglayerlayout(fh,'Elements', {M.hInfoPane}); set(modellist,'SelectionChangedCallback', {@changeSelection,M,iFace}) end function f = getNextPage(W) f = getModelNextPage(W.Data); end end methods (Static) function layout = createPage( C,fh, iFace ) %CREATEPAGE static factory function for table wizard page % % layout = createPage( C,fh, iFace ) if isa(fh, 'xregcontainer') M = get(fh,'UserData'); updatePage(M,iFace) else iFace.setWizardSize( [450, 350] ); set(fh,'Resize','off'); iFace.setUserData(C); M = cgcalsetup.ModelPage(fh,iFace,C); end feval(iFace.setNextButton, 1); feval(iFace.setFinishButton, 0); layout = M.Layout; end end end function changeSelection(~,~,M,iFace) %changeSelection callback to change selected model ModelNum = getSelectedRows(M.ModelList); if ~isempty(ModelNum) if M.Data.pModelList(ModelNum).isSwitchModel % can only create a data set for point-by-point model set(M.hDataset,'Enable','on') else set(M.hDataset,'Enable','off','Value',0) end feval(iFace.setNextButton, 1 ); else %no model selected so disable next button feval(iFace.setNextButton, 0 ); end end