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