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

    classdef MergeItemsPage < cgcalsetup.WizardPage
%CGMERGESETUP.MERGEITEMS wizard page for setting up composite models 
%    Base class for CageModelPage and TestplanPage
    
    
%  Copyright 2009-2015 The MathWorks, Inc. and Ford Global Technologies, Inc.
   
    properties
        %MODELLIST table for displaying items to be merged
        ModelList
        %INPUTLIST control to display list of inputs for composite model 
        %    This list does not include the model variable
        InputList
    end
    
    properties(Access=private)
        %HTOTALSELECTED control to display total number of items to be merged.
        hTotalSelected
    end
    
    methods
        function updateData(M)
            %UPDATEDATA update mergesetup data
            %    updateData(M)
            
            C = M.Data;
            if length(C.pSelected)>1 
                % set up defaults
                C.setDefaults();
            end
        end

        function updatePage(M,iFace)
            %UPDATEPAGE update 
            %    updatePage(M,iFace)
          updateMergeList(M);
          updateInputList(M);
          updateResponseTool(M);
          enableNext(M,iFace);
        end
        
    end
        
    methods(Access=protected)
        
        function M = MergeItemsPage(fh,iFace,C)
            %MERGEITEMSPAGE protected constructor
            %    M = MergeItemsPage(fh,iFace,C);
            
            if nargin
                M.Data = C;
                M.Layout = createLayout(M,fh,iFace);
                updatePage(M,iFace)
            end
        end
        
        function MainLyt = createLayout(M,fh,iFace)
            %createLayout create main layout for model page
            %
            % MainLyt = createLayout(M,fh,iFace)

            
            M.ModelList = mbcwidgets.Table1D( 'list',...
                'parent', fh,...
                'Editable',true,...
                'Tag','ModelList',...
                'ValueChangedCallback',{@cbSelectItem,M,iFace},...
                'SelectionMode', 'SingleRow');
            configureMergeTable(M);
            
            M.hTotalSelected = uicontrol('Parent',fh,...
                'HorizontalAlignment','left',...
                'Style','text');

            M.InputList = mbcgui.widget.Label('Parent', fh, ...
                'HorizontalAlignment', 'left');
            
            hInputLabel = xregGui.labelcontrol('parent',fh, ...
                'LabelSizeMode', 'absolute', ...
                'LabelSize', 40, ...
                'ControlSizeMode', 'relative', ...
                'ControlSize', 1, ...
                'String', 'Inputs:', ...
                'Control', M.InputList);
            
            hResponse = createResponseTool(M,fh,iFace);
                        
            Lyt=xreggridbaglayout(fh,'dimension',[3 2],...
                'rowsizes',[-1 25 20],...
                'colsizes',[-1 150],...
                'gapx', 20, ...
                'gapy',5,...
                'border',[10 10 10 10],...
                'mergeblock',{[1 1],[1 2]},...
                'mergeblock',{[3 3],[1 2]},...
                'elements',{M.ModelList,M.hTotalSelected,hInputLabel,...
                [],hResponse,[]});
            MainLyt = addInfoPane(M,fh,'Model',Lyt);
        end
        
        function updateMergeList(M)
            %UPDATEMERGELIST update merge list
            %    updateMergeList(M)
            
            %update table data
            updateMergeTable(M)
            C = M.Data;
            % update selected items
            [OK,loc] = ismember(C.Labels,pveceval(C.pSelected,@getname));
            C.pSelected = C.pSelected(loc(OK));
            % check boxes
            M.ModelList.Peer.setChecks(OK);
            M.ModelList.Peer.setIconData(C.IconFiles,0);
            % total number selected
            set(M.hTotalSelected,'String',sprintf('Total selected: %d',sum(OK)));
        end
        
        function updateInputList(M)
            %UPDATEINPUTLIST update model input list
            %   updateInputList(M)
            C = M.Data;
            % List is displayed as a comma separated string
            if isempty(C.InputList)
                List = '<none>';
            else
                List = mbcListString(C.InputList);
            end
            set(M.InputList,'String',List);
        end
        
        function changeMergeItems(M)
            %CHANGEMERGEITEMS 
            %    changeMergeItems(M)
            
            C = M.Data;

            OK = ismember(C.Labels,pveceval(C.pSelected,@getname));
            set(M.hTotalSelected,'String',sprintf('Total selected: %d',sum(OK)));

            updateInputList(M);
            updateResponseTool(M);
        end
        
        function f= getNextPage(M) %#ok<MANU>
            %getNextPage next page is for mode setup
            f = @cgmergesetup.ModePage.createPage;
        end        
        
    end
    
    methods(Abstract,Access=protected)
        enableNext(M,iFace,State)
        configureMergeTable(M)
        updateMergeTable(M)
        updateResponseTool(M)
        Lyt = createResponseTool(varargin)
    end
    
end


function cbSelectItem(h,evt,M,iFace)
C = M.Data;

chks = h.getChecks;
chks(evt.data.Rows) = evt.data.NewValue.booleanValue;

C.pSelected = C.MergeList(chks);
changeMergeItems(M);
enableNext(M,iFace);
end