www.gusucode.com > mbcdata 工具箱 matlab 源码程序 > mbcdata/+cgmergesetup/CageModelPage.m

    classdef CageModelPage <cgmergesetup.MergeItemsPage
%CGMERGESETUP.MODELPAGE wizard page for setting up composite models from CAGE   
    
%  Copyright 2009-2010 The MathWorks, Inc. and Ford Global Technologies, Inc.
    
    properties
        %HSELECTRESPONSES button to select common responses
        hSelectResponses
    end

    properties(Dependent)
        %ICONFILES icon files for main merge item tables
        IconFiles
    end
    
    methods

        function updatePage(M,iFace)
            %UPDATEDATA update mergesetup data
            %    updateData(M)
            
            updatePage@cgmergesetup.MergeItemsPage(M,iFace)
            updateResponseTool(M);
            M.hInfoPane.Title = 'Cage model selection';
            M.hInfoPane.InfoString = 'Select cage models to create composite models from.';
        end
        
    end
        
    methods(Access=protected)
        
        function M = CageModelPage(fh,iFace,C)
            %CAGEMODELPAGE protected constructor
            %
            %   See also createPage
            
            M@cgmergesetup.MergeItemsPage(fh,iFace,C);
        end
        
        
        function h = createResponseTool(M,fh,iFace)
            %CREATERESPONSELAYOUT extra controls for selecting responses for merging
            %    [Lyt,RespSize] = createResponseLayout(M,fh,iFace)
            
            M.hSelectResponses = uicontrol('Parent',fh,...
                'Style','PushButton',...
                'String','Select similar responses',...
                'Tag','SimilarResponses',...
                'Callback',{@cbkSimilarResponses,M,iFace});

            h = M.hSelectResponses;

        end        
        
        function configureMergeTable(M)
            %CONFIGUREMERGETABLE configure table for selection of items to be merged
            %    configureMergeTable(M,fh)
            
            M.ModelList.Peer.setIconBaseLocation(cgrespath);
            M.ModelList.Peer.setColumnData( {'Model','Response','Inputs'} );
            M.ModelList.Peer.setColumnWidths([120 100 180]);
            M.ModelList.Peer.setDisplayChecks(true);
        end
        
        function updateMergeTable(M)
            %UPDATEMERGETABLE update merge table
            %    updateMergeTable(M)
            
            C = M.Data;
            pModels = C.MergeList;
            % internal response model name
            Responses = pveceval(pModels,str2func('@(m) getname(get(m,''model''))'));
            Table = [C.Labels(:),Responses(:),C.InputLabels(:)];
            M.ModelList.Peer.setData(Table);
        end
        
        function updateResponseTool(M)
            %UPDATERESPONSELIST enable 'Select Similar Responses' button
            %    updateResponseList(M)
            set(M.hSelectResponses,'Enable',mbconoff(M.Data.hasMoreSimilarResponses))
        end
        
        function enableNext(M,iFace)
            %ENABLENEXT enable next page on wizard
            %   enableNext(M,iFace)
            %   There must be more than one item selected for merging
            %    This page is not the last page in the wizard so Finish can
            %    never be enabled
            
            C = M.Data;
            OK = length(C.pSelected)>1;
            
            feval(iFace.setNextButton, OK);
            feval(iFace.setFinishButton, false);            
        end
        
    end
    
    methods(Static)
       function layout = createPage( C,fh, iFace )
            %CREATEPAGE static factory function for the cage model
            %selection page
            %    layout = cgmergesetup.CageModel.createPage( C,fh, iFace )
            
            if isa(fh, 'xregcontainer')
                M = get(fh,'UserData');
                updatePage(M,iFace)
            else
                iFace.setWizardSize( [450, 350] );
                iFace.setUserData(C);
                M = cgmergesetup.CageModelPage(fh,iFace,C);
            end
            layout = M.Layout;
            
       end
    end
end




function cbkSimilarResponses(~,~,M,iFace)
%CBSIMILARRESPONSES callback to select similar responses
%    cbSimilarResponses(~,~,M,iFace)

C = M.Data;
C.selectSimilarResponses;
M.updatePage(iFace);
enableNext(M,iFace);
end