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

    classdef OutlierActions < handle
    %mbcmodelview.OutlierActions outlier actions for model views
    
    %  Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc.
    
    properties (SetAccess=private)
        %MultiSelect multiselect outliers
        MultiSelect
        %Clear clear outlier selection
        Clear
        %Remove remove outliers from fit
        Remove
        %Restore restore removed data
        Restore
        %Copy copy outliers from another model node
        Copy
        %SelectionCriteria setup selection criteria for outlier
        SelectionCriteria
        %RemoveAll remove all data from fit
        RemoveAll
    end
    
    properties(Access=private)
        %ActionGroup
        ActionGroup
        %MessageService store for message service
        MessageService
    end

    
    methods
        
        function obj = OutlierActions(MessageService)
        
        obj.MessageService = MessageService;
        
        obj.MultiSelect = mbcgui.actions.StatefulAction(@obj.onMultiSelect,...
            'Select &Multiple Outliers');
        obj.Clear = mbcgui.actions.StatefulAction(@obj.onClear,...
            '&Clear Outliers');
        obj.Remove = mbcgui.actions.StatefulAction(@obj.onRemove,...
            '&Remove Outliers');    
        obj.Restore = mbcgui.actions.StatefulAction(@obj.onRestore,...
            'Restore Removed &Data...');    
        obj.Copy = mbcgui.actions.StatefulAction(@obj.onCopy,...
            'Co&py Outliers From...');           
        obj.SelectionCriteria = mbcgui.actions.StatefulAction(@obj.onSelectCriteria,...
            '&Selection Criteria...');
        
        obj.RemoveAll = mbcgui.actions.StatefulAction(@obj.onRemoveAll,...
            '&Remove all...');
        
        obj.ActionGroup = mbcgui.actions.ActionGroup('','Outliers');
        obj.ActionGroup.Actions = [obj.Clear,obj.Remove,obj.Restore,obj.Copy,obj.SelectionCriteria];
        obj.ActionGroup.MenuType = 'separate';        
        
        end
        
        function createMenus(obj,hParent)
        
        hMenu = createMenuItem(obj.ActionGroup,hParent);
        set(hMenu(2),'Accelerator','A')
        set(hMenu(3),'Accelerator','Z')
        
        end
        
        function createLocalMenus(obj,hParent)
        %createLocalMenus local outlier menu has RemoveAll
        hMenu = createMenuItem(obj.ActionGroup,hParent);
        set(hMenu(2),'Accelerator','A')
        set(hMenu(3),'Accelerator','Z')
        createMenuItem(obj.RemoveAll,hParent);
        end
        
        function enable(obj)
        %enable enable outlier actions
        ms = obj.MessageService;
        if isa(ms.ModelDev,'mdevmlerf')
            % can't copy or change selection criteria
            obj.Copy.Enabled = false;
            obj.SelectionCriteria.Enabled = false;
        else
            if obj.MessageService.Status==0 
                % model not fitted
                set(obj.ActionGroup.Actions,'Enabled',false)
                obj.RemoveAll.Enabled = false;
                % need to restore data when model not fitted
                set(obj.Restore,'Enabled',true)
            else
                set(obj.ActionGroup.Actions,'Enabled',true)
                obj.RemoveAll.Enabled = true;
            end
        end
        end

    end
    
    
    methods(Access=protected)
            
        function onRemove(obj,~,~)
        
        ms = obj.MessageService;
        
        pot_outlier= ms.OutlierLine.OutlierIndices;
        
        % get the potential outlier index
        if ~isempty(pot_outlier)
            busy(ms);
            addOutliers(ms,pot_outlier)
            idle(ms);
        end
        end
        
        function onRestore(obj,~,~)
        % get the outlier line
        % fire up dialogue for outlier restoration
        
        ms = obj.MessageService;
        busy(ms);
        restoreOutliers(ms);
        idle(ms);
        
        end
        
        function onClear(obj,~,~)
        %clear clear outliers
        clear(obj.MessageService.OutlierLine);
        end

        function onMultiSelect(obj,~,~)
        %multiselect start multi selection for outliers
        multiselect(obj.MessageService.OutlierLine);
        end
        
        function onSelectCriteria(obj,~,~)
        %onSelectCriteria setup outlier selection criteria
        
        % outlier selection dialog
        ms = obj.MessageService;
        
        busy(ms);
        [~,OK]= OutlierDialog(ms.ModelDev);
        if OK
            % update outlier lines with suggested outliers from diagnostic
            % statistics
            update(ms);
        end
        idle(ms);

        end
        
        function onCopy(obj,~,~)
        %onCopy copy outliers from another node
        
        ms = obj.MessageService;
        busy(ms);
        [~,OK]=CopyOutliers(ms.ModelDev);
        if OK
            update(obj.MessageService,true);
        end
        idle(ms);
        
        end
        
        function onRemoveAll(obj,~,~)
        %onRemoveAll remove all data from fit
        
        ms = obj.MessageService;
        % remove all points in fit 
        busy(ms);
        addOutliers(ms,1:nnz(ms.DataOK));
        idle(ms);

        end
    end

    
end