www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/+mbcmodelview/+twostage/Actions.m
classdef Actions < handle %Actions two-stage model level actions for model browser % Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc. properties (SetAccess=private) %MessageService storage for message service MessageService end properties (SetAccess=private) %Evaluate Model evaluation Evaluate %SelectModel select best two-stage model SelectModel %ViewModel view model description ViewModel %ViewData view two-stage modelling data ViewData %NextPage go to next page of sweep plots NextPage %PreviousPage go to previous page of sweep plots PreviousPage %SelectTest select test to show in sweep plots SelectTest %TestGroup action group for test/page selection TestGroup %NewLocal create new local model NewLocal %ViewLocal view local model node ViewLocal end methods function obj = Actions(MessageService) %Actions constructor obj.MessageService = MessageService; % Model evaluation options obj.Evaluate = mbcgui.actions.ActionGroup('',... '&Evaluate','Evaluate current model response',[]); obj.Evaluate.MenuType = 'submenu'; obj.Evaluate.Actions = [mbcgui.actions.StatefulAction(@obj.onEvaluateFitData,'&Fit Data...') mbcgui.actions.StatefulAction(@obj.onEvaluateValData,'&Validation Data...') mbcgui.actions.StatefulAction(@obj.onEvaluateNoData,'&No Data...') mbcgui.actions.StatefulAction(@obj.onEvaluateOtherData,'&Other Data...')]; obj.SelectModel= mbcgui.actions.StatefulAction(@obj.onSelectModel,... 'Selection &Window...','Model selection window...',[]); obj.ViewModel = mbcgui.actions.StatefulAction(@obj.onViewModel,... '&Model Definition','View model definition',xregrespath('viewCube.bmp')); obj.ViewData = mbcgui.actions.StatefulAction(@obj.onViewData,... 'Modeling &Data','View model data',xregrespath('data.bmp')); obj.NextPage = mbcgui.actions.StatefulAction(@obj.onNextPage,... '&Next Page','Next page',xregrespath('arrow_move_right_lg.bmp')); obj.PreviousPage = mbcgui.actions.StatefulAction(@obj.onPreviousPage,... '&Previous Page','Previous page',xregrespath('arrow_move_left_lg.bmp')); obj.SelectTest = mbcgui.actions.StatefulAction(@obj.onSelectTest,... '&Select Test...','Select test',''); obj.TestGroup = mbcgui.actions.ActionGroup('','Test Selector'); obj.TestGroup.Actions = [obj.NextPage,obj.PreviousPage,obj.SelectTest]; obj.TestGroup.MenuType = 'separate'; obj.ViewLocal = mbcgui.actions.StatefulAction(@obj.onViewLocalModel,... '&View Local Model','View local model',xregrespath('localmod.bmp')); obj.ViewLocal.TransparentColor = [255 0 255]; obj.NewLocal = mbcgui.actions.StatefulAction(@obj.onNewModel,... '&New Local Model...','New local model',xregrespath('newlocalmod.bmp')); end function enable(obj) %enable enable actions ms = obj.MessageService; obj.ViewLocal.Enabled = numChildren(ms.ModelDev)>0; obj.ViewModel.Enabled = ms.Status; obj.ViewData.Enabled = ms.Status; obj.Evaluate.Enabled = ms.Status; % Evaluate with validation data obj.Evaluate.Actions(2).Enabled = ms.Status~=0 && ~isempty(ms.ValidationXData); obj.TestGroup.Enabled = ms.Status; if ms.Status obj.SelectModel.Enabled = numChildren(ms.ModelDev)>0; obj.NextPage.Enabled = ms.CurrentPage < ms.NumPages; obj.PreviousPage.Enabled = ms.CurrentPage > 1; end end function createMenus(obj,hMenus,mv) %#ok<INUSD> %createMenus create two-stage modelmenus createModelMenu(obj,hMenus(1)); createViewMenu(obj,hMenus(2)); end function createToolbar(obj,hToolbar) %createToolbar create two-stage toolbar h = createToolbutton(obj.ViewModel,hToolbar); createToolbutton(obj.ViewData,hToolbar); end function createWorkflowItems(obj,hWorkflow) %createWorkflowItems create two-stage workflow pane AG = mbcgui.actions.ActionGroup([],'Workflow'); AG.Actions = [obj.ViewLocal,obj.NewLocal]; AG.MenuType = 'separate'; createWorkflowItems(AG,hWorkflow); end end methods (Access=private) function createModelMenu(obj,hMenu) %createModelMenu create model menu items h = createMenuItem(obj.Evaluate,hMenu); h(2).Accelerator = 'E'; createMenuItem(obj.SelectModel,hMenu); end function createViewMenu(obj,hMenu) %createViewMenu create view menu items h=createMenuItem(obj.ViewModel,hMenu); h.Accelerator = 'V'; createMenuItem(obj.ViewData,hMenu); h = createMenuItem(obj.TestGroup,hMenu); h(1).Accelerator = 'F'; h(2).Accelerator = 'B'; end % evaluate callbacks function onEvaluateFitData(obj,~,~) %onEvaluateFitData evaluation with fit data evaluateFitData(obj.MessageService); end function onEvaluateValData(obj,~,~) %onEvaluateValData evaluation with validation data evaluateValData(obj.MessageService); end function onEvaluateNoData(obj,~,~) %evaluateNoData evaluation with no data evaluateNoData(obj.MessageService); end function onEvaluateOtherData(obj,~,~) %evaluateNoData evaluation with other data evaluateOtherData(obj.MessageService); end function onSelectModel(obj,~,~) %onSelectModel open model selection figure msg = selectModelFigure(obj.MessageService); if ~isempty(msg) errordlg(msg,'Model Selection','modal'); end end function onViewModel(obj,~,~) %onViewModel view model description ms = obj.MessageService; mvH = xregModelViewer(ms.Model, fullname(ms.ModelDev)); registerSubFigure(ms,mvH); end function onViewData(obj,~,~) %onViewData view local data in data editor ms = obj.MessageService; % Set pointer to be a watch busy(ms); ss = [ms.XData expand(ms.GlobalXData,tsizes(ms.XData)) ms.YData]; predictedY = set(ms.YData, 'Name', {['predicted_' varname(ms.Model)]} ); % Evaluate the model predictedY(:, 1) = ms.Model({ms.XData,ms.GlobalXData}); % Concatenate into the sweepset ss = [ss predictedY]; ss = ss(ms.DataOK,:); % Open data edit facility hData = xregdatagui.Editor.create; % Register as a subfigure registerSubFigure(ms,hData.Figure); % Send the modelling data to the data editor hData.MessageService.setDataObject(ss); hData.MessageService.isReadOnly = true; % Set pointer to be the default idle(ms); end function onNextPage(obj,~,~) %onNextPage next page callback ms = obj.MessageService; busy(ms); ms.CurrentPage = ms.CurrentPage+1; update(ms); idle(ms); end function onPreviousPage(obj,~,~) %onPreviousPage previous page callback ms = obj.MessageService; busy(ms); ms.CurrentPage = ms.CurrentPage-1; update(ms); idle(ms); end function onSelectTest(obj,~,~) %onSelectTest select test callback ms = obj.MessageService; [index,OK]=mv_listdlg('ListString',num2str(testnum(ms.YData)'),... 'InitialValue',1,... 'PromptString','Select by Test Number',... 'Name','Select Test',... 'ListSize',[140 200],... 'fus',15,'ffs',15,... 'uh',25,... 'SelectionMode','single'); if OK ms.CurrentPage =floor((index-1)/4)+1; update(ms) end; end function onNewModel(~,~,~) %onNewModel create new local model NewNode(MBrowser) end function onViewLocalModel(obj,~,~) %onViewLocalModel select local model ms = obj.MessageService; ch = children(ms.ModelDev); if ~isempty(ch) mbh = MBrowser; SelectNode(mbh,ch(1)); end end end end