www.gusucode.com > mbcview 工具箱matlab源码程序 > mbcview/+cgcalsetup/TablePage.m

    classdef TablePage < cgcalsetup.WizardPage
    %TABLEPAGE wizard page to setup tables and tradeoff
    %
   % cgcalsetup.TablePage 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)
        %TABLELIST java table for tables
        TableList
        %HTRADEOFF checkbox for creating tradeoff
        hTradeOff
        %hListeners store for any listeners
        hListeners
        %hTableInputs table inputs string
        hTableInputs
    end
    
    methods
        
        function updateData(T)
            %UPDATEDATA update table data from TablePage wizard
            
            C = T.Data;
            C.CreateTables = T.TableList.getChecks;
            C.CreateTradeoff = get(T.hTradeOff,'Value');
            TableData = T.TableList.getData;
            C.TableName = TableData(:,2);
            for i=1:size(C.TableName)
               C.TableRange{i} = TableData{i,3}(:)';
            end
            
            
        end
        
        function updatePage(T,~)
            %UPDATEPAGE update TablePage wizard from table data 
            %
            % updatePage(T,iFace)
            
            % table for tables and fill items
            C = T.Data;
            
            TableInputDescription = cell(1,length(C.pTableInputs));
            for i = 1:length(C.pTableInputs)
                if ~isnull(C.pNorm(i))
                    TableInputDescription{i} = C.pNorm(i).getname;
                else
                    pInp= C.pTableInputs(i);
                    % use input_norm unique name
                    TableInputDescription{i} = C.Project.uniquename( sprintf('%s_norm',pInp.getname) );
                end
            end
            set(T.hTableInputs,'String',sprintf('Normalizers: %s',mbcListString(TableInputDescription)));
            
            
            Icons = pveceval(C.pItems,@iconfile)';
            for i=1:length(C.pItems)
                Icons{i} = cgrespath(Icons{i});
            end
            T.TableList.Peer.setColumnWidths([150 150 120]);
            T.TableList.Peer.setData( [pveceval(C.pItems(:),@getname) C.TableName(:) C.TableRange(:)]);
            T.TableList.Peer.setIconData(Icons , 0);
            
            TableIcons(1:length(C.pItems),1) = {cgrespath('cgfulltable.bmp')};
            T.TableList.Peer.setIconData( TableIcons, 1);
            T.TableList.Peer.setDisplayChecks(true);
            T.TableList.Peer.setChecks(C.CreateTables(:));
            
            InfoStr = 'Select the items to create tables for. Tables are initialized with values from their associated item.';
            T.hInfoPane.InfoString = InfoStr;
            
        end
        
        
    end
    
    methods(Access=protected)
        function T = TablePage(fh,iFace,C)
            %TABLEPAGE protected constructor
            T.Data = C;
            T.Layout = createLayout(T,fh,iFace);
            updatePage(T,iFace)
        end
        
        
        function MainLyt =createLayout(T,fh,iFace)
            %createLayout create layout for TablePage
            

            
            C = T.Data;
            
            T.hTableInputs=uicontrol('Parent',fh,...
                'Style','text',...
                'HorizontalAlignment','left');

            
            T.hTradeOff=uicontrol('Parent',fh,...
                'Style','checkbox',...
                'String','Create a tradeoff containing all the tables',...
                'Value',1);
            
            tablelist = mbcwidgets.List(...
                'parent', fh,...
                'Editable', true, ...
                'SelectionMode', 'None');
            tablelist.Peer.setColumnData( {'Item','Table Name','Table Bounds'} );
            T.TableList = tablelist;
            
            tablelist.Peer.setIdentifierColumns(1);
            tablelist.Peer.setBoundsColumns(2);
            tablelist.Peer.setEditableColumns(1:2);
            
            MainLyt=xreggridbaglayout(fh,'dimension',[3 1],...
                'rowsizes',[15,-1 20 ],...
                'gapx', 20, ...
                'gapy',5,...
                'border',[10 10 10 10],...
                'elements',{T.hTableInputs,tablelist,T.hTradeOff});
            

            T.hInfoPane = mbcgui.container.InfoPane('Parent', fh, ...
                'InfoHeight', 35, ...
                'Title','Tables and Tradeoff',...
                'Center', MainLyt);
            MainLyt = xreglayerlayout(fh, 'Elements', {T.hInfoPane});
            
            T.hListeners = handle.listener(T.TableList, 'ValueChanged',{@cbEditTables,T,iFace});
        end
        
        function f= getNextPage(W)
            %getNextPage no next page for TablePage
            f = '';
        end
    end
    
    methods (Static)
        function layout = createPage( fh, iFace, C )
            %createPage create wizard page for TablePage
            if isa(fh, 'xregcontainer')
                T = get(fh,'UserData');
                updatePage(T,iFace)
            else
                T = cgcalsetup.TablePage(fh,iFace,C);
            end
            feval(iFace.setNextButton, 0);
            %enable finish if there are any tables to create
            feval(iFace.setFinishButton, any(C.CreateTables));            
            layout = T.Layout;
        end
    end
end
        
function cbEditTables(~,~,T,iFace)
%iEditTables callback for checkboxes in table
idxFree = T.TableList.getChecks;
feval(iFace.setFinishButton, any(idxFree));

end