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

    classdef DataDrivenDialog < handle
    %DataDrivenDialog dialog to create test plans and fit models to data
    
    %  Copyright 2014-2016 The MathWorks, Inc. and Ford Global Technologies, Inc.

    properties (SetAccess=private)
        %DataSelector UI component to select data
        DataSelector
        %TemplateSelector UI component test template selector
        TemplateSelector
        %IOSelector UI component to select inputs and outputs
        IOSelector
        %Dialog mbcgui.container.Dialog
        Dialog
        %Model data model
        Model
        %Listeners store for listeners
        Listeners
    end
    
    methods
        
        function obj = DataDrivenDialog(Model)
        %DataDrivenDialog constructor
        
        dlg = mbcgui.container.Dialog(...
            'Name', 'Fit Models',...
            'Size', [530 660], ...
            'Buttons', 'OK_CANCEL_HELP', ...
            'DefaultAction', 'OK', ...
            'CloseAction', 'CANCEL', ...
            'HelpCode', 'FitModelsDialog', ...
            'Tag', 'TestplanTemplates');
        
        obj.Model = Model;
        obj.Dialog = dlg;
        obj.DataSelector = tpsetup.DatasetSelector(dlg.Figure,Model);
        obj.TemplateSelector = tpsetup.TemplateSelector(dlg.Figure,Model);
        obj.IOSelector = tpsetup.DataDrivenIO(dlg.Figure,Model);
        
        OpenDataEditor = uicontrol('Parent',dlg.Figure,...
            'Style','checkbox',...
            'Value',Model.OpenDataEditor,...
            'Callback',{@editData,Model},...
            'String','Open Data Editor on completion');
        
        mainl=xreggridbaglayout(dlg.Figure,...
            'dimension',[4, 2],...
            'elements',{...
            obj.DataSelector.Layout,obj.TemplateSelector.Layout,obj.IOSelector.Layout,[],...
            [],[],[],OpenDataEditor},...
            'rowsizes',[140,130,-1,20],...
            'colsizes',[-1 200],...
            'border',[0 10 0 0],...
            'mergeblock',{[1 1],[1 2]},...
            'mergeblock',{[2 2],[1 2]},...
            'mergeblock',{[3 3],[1 2]},...
            'gapy',5,...
            'gapx',5);
        
        dlg.Content = mainl;
        
        obj.Listeners = [event.proplistener(Model,Model.findprop('pData'),'PostSet',@obj.dataChanged),...
            event.proplistener(Model,Model.findprop('InputsOK'),'PostSet',@obj.inputsOK)];
        set(dlg.Figure,'UserData',obj);

        update(obj)

        end
        
        function inputsOK(obj,~,~)
        %inputsOK enable OK when inputs are OK
        
        if obj.Model.InputsOK
            obj.Dialog.enableButtons('OK')
        else
            obj.Dialog.disableButtons('OK')
        end
        end
        
        function update(obj)
        %update update dialog
        update(obj.DataSelector);
        update(obj.TemplateSelector);
        update(obj.IOSelector);
        
        end
        
        function dataChanged(obj,~,~)
        %dataChanged data changed requires all the GUI is updated
        update(obj)
        end
        
        function finalize(obj)
        %finalize final dialog actions
        T = finalize(obj.IOSelector);

        obj.Model.FinalTestplan = T;
        createTestplan(obj.Model)
        pFitData = obj.Model.pData;
        if isnull(pFitData) || isempty(pFitData.info)
            % provide a message to users that data is not selected.
            warndlg('No data is selected. Use the test plan ''Fit Models'' function to select data for modeling.','Fit Models','modal') 
        elseif ~isnull(pFitData) 
            % only fit models if data is present
            if obj.Model.OpenDataEditor
                % open data editor
                sendToDataEditor(obj.Model)
            else
                fitmodels(obj.Model);
            end
        end
        end
    end
    
    methods(Static)
        function create(Model)
        %create create dialog
        
        obj = tpsetup.DataDrivenDialog(Model);
        closeMode = obj.Dialog.showDialog();
        
        ok = strcmp(closeMode, 'OK');
        if ok
            finalize(obj);
        end
        delete(obj.Dialog);
        
        end
    end
    
end


function editData(h,~,Model)

Model.OpenDataEditor = logical(get(h,'Value'));
end