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