www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+tpsetup/DoEDrivenIO.m

    classdef DoEDrivenIO < handle
    %DoEDrivenIO IO selector for DoE-driven modelling
    
    %  Copyright 2014-2014 The MathWorks, Inc. and Ford Global Technologies, Inc.
    
    properties (SetAccess=private)
        %Layout main layout
        Layout
    end
    
    properties (Access=private)
        %InputLayouts layouts for individual layout type
        InputLayouts
        %Parent parent of component
        Parent
        %Listeners store for listeners
        Listeners
        %Model data model objec
        Model
        
        
    end
    
    
    methods
        function obj = DoEDrivenIO(parent,Model)
            %DoEDrivenIO constructor
            obj.Model = Model;
            obj.Parent = parent;
            tp = load('tpbuiltintemps.mat');
            rsizes = {-1 ,[125 -1],[-1 135]};
            
            obj.Layout = xregcardlayout(parent,'NumCards',3);
            
            obj.InputLayouts = cell(1,length(tp.templates));
            
            
            createIOTables(obj,1)
            
            obj.Listeners = event.proplistener(Model,Model.findprop('Selected'),'PostSet',@obj.onUpdate);
            
            
        end
        
        function onUpdate(obj,~,~)
            %onUpdate respond to change in selected test plan
            update(obj);
        end
        
        function update(obj)
            %update update input setup
            T=obj.Model.Selected;
            TpInputs= getInputs(T);
            TpType = obj.Model.TypeIndex;
            if isempty( obj.InputLayouts{TpType} )   
                % create IO tables if necessary
                createIOTables(obj,TpType)
            end

            set(obj.Layout, 'CurrentCard',TpType);
            Lyt = obj.InputLayouts{TpType};
            for i=1:length(TpInputs)
                gui_InputSetup(TpInputs{i},'update',Lyt{i},true);
            end
        end
        
        
        function [T,OK] = finalize(obj)
            %finalize finalize test plan inputs
            
            T=obj.Model.Selected;
            
            TpType = obj.Model.TypeIndex;
            TpInputs= getInputs(T);
            OK = true;
            Lyt = obj.InputLayouts{ TpType };
            for i=1:length(TpInputs)
                [TpInputs{i},OKi]= gui_InputSetup(TpInputs{i},'finalize',Lyt{i});
                OK = OK && OKi;
            end
            if OK
                T = setInputs(T,TpInputs);
            end
        end
        
    end
    
    methods (Access=private)
        function createIOTables(obj,j)
            tp = load('tpbuiltintemps.mat');
            rsizes = {-1 ,[125 -1],[-1 135]};
            
            BaseInputs = getInputs(tp.templates{j});
            [typeLabel,InputLabels]= type(tp.templates{j});
            
            tpInpLyt = mbcgui.container.layoutpanel('Parent',obj.Parent,...
                'LayoutBorder',[7 7 7 7],...
                'BorderType','etchedin',...
                'Title',sprintf('%s Test Plan',typeLabel));
            
            lytTitle = cell(1,length(BaseInputs));
            inpLyt = lytTitle;
            for i=1:length(BaseInputs)
                % input layout for each stage
                lytTitle{i} = mbcgui.container.titlebarpanel('Parent',tpInpLyt,...
                    'BarTitle',InputLabels{i});
                inpLyt{i} = gui_InputSetup(BaseInputs{i},'layout',lytTitle{i},false);
                set(inpLyt{i},'Border', [7 2 7 2]);
                set(lytTitle{i},'ContentHandle',inpLyt(i))
            end
            typelyt = xreggridlayout(tpInpLyt, ...
                'dimension',[length(BaseInputs), 1],...
                'correctalg','on',...
                'rowsizes',rsizes{j},...
                'gapy',10, ...
                'elements',lytTitle);
            set(tpInpLyt,'LayoutComponent',{typelyt});
            attach(obj.Layout,tpInpLyt,j);
            
            obj.InputLayouts{j} = inpLyt;
        end
    end
    
end