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