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

    classdef MessageService < mbcgui.multiview.AbstractMessageService
    %MessageService abstract model view Message Service
    
    %  Copyright 2015-2015 The MathWorks, Inc. and Ford Global Technologies, Inc.
    
    properties (SetAccess=protected)
        %Pointer xregpointer to modeldev node
        Pointer = xregpointer;
        %Actions
        Actions
    end
    
    events(NotifyAccess=protected)
        %NodeUpdated main update event
        NodeUpdated
        %NodeReset node needs reseting
        NodeReset
        %NodeChanged node has changed
        NodeChanged
        %NodeLeft 
        NodeLeft
        %Busy message service is busy
        Busy
        %Idle message service is idle
        Idle
        %RedrawRequired notify that a complete redraw of the node is required
        RedrawRequired
        %TreeChanged tree structure has changed
        TreeChanged
    end
    
    properties(Abstract,Dependent,SetAccess=private)
        %Title
        Title
    end
    
    properties (Dependent,SetAccess=private)
        %Node update-to-date node information
        Node
    end    
    
    properties (Access=private)
        SubFigures
    end
    
    methods
        
        function OK = leaveNode(obj)
        %leaveNode get ready to leave node
        
        OK = closeSubFigures(obj);
        if OK
            notify(obj,'NodeLeft');
            obj.Pointer = xregpointer;
        end
        end
        
        function OK = hasData(obj)
        %hasData node initialised with a modeldev
        %   MultiView framework method 
        OK = ~isnull(obj.Pointer);
        end
        
        function nm = getDataName(obj)
        %getDataName name of multiview 
        if hasData(obj)
            nm = obj.Title;
        else
            nm = '<unknown>';
        end
        
        end
        
        function mdev = get.Node(obj)
        if isvalid(obj.Pointer)
            mdev =  info(obj.Pointer);
        else
            mdev = [];
        end
        
        end        
        
        function busy(ms,msg)
        %busy send event that MessageService is busy
        if nargin>1
            evt = xregEventData(msg);
        else
            evt = xregEventData('');
        end
        notify(ms,'Busy',evt);
        end
        
        function idle(ms)
        %idle send event that MessageService is idle
        notify(ms,'Idle');
        end
        
        function registerSubFigure(ms,hFig)
        %registerSubFigure send event that subfigure is added to framework
        
        if isgraphics(hFig,'figure') && ~ismember(hFig,ms.SubFigures)
           ms.SubFigures = [ms.SubFigures hFig]; 
        end
        
        end
        
        
        function OK = closeSubFigures(ms)
        
        ms.SubFigures = ms.SubFigures(isgraphics(ms.SubFigures));
        if ~isempty(ms.SubFigures)
            % close all visible subfigures
            fh= findobj(ms.SubFigures,'flat','Visible','on');
            fh= unique(fh);
            if ~isempty(fh)
                close(fh);
                fh= findobj(fh(isgraphics(fh)),'flat','Visible','on');
            end
            OK = isempty(fh);
        else
            OK = true;
        end
        end
        
        function redrawNode(ms)
        %redrawNode send message that a full redraw of node is required 
        %  redraw also requires tasks to be performed by MBrowser
        notify(ms,'RedrawRequired');
        end
        
        function changeTree(ms,pAddNodes,pRemoveNodes)
        
        evtData.pAddNodes = pAddNodes;
        evtData.pRemoveNodes = pRemoveNodes;
        notify(ms,'TreeChanged',xregEventData(evtData));
        
        end
        
    end
    
    methods (Access=protected)
        
        function fireNodeReset(obj)
        notify(obj,'NodeReset')
        end

        function fireNodeChanged(obj)
        notify(obj,'NodeChanged')
        
        end
        function fireNodeUpdated(obj)
        notify(obj,'NodeUpdated')
        end        
        
    end

    
end