1 // Copyright (C) 2006-2013 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef __DISPATCHER_HXX__
21 #define __DISPATCHER_HXX__
23 #include "YACSlibEngineExport.hxx"
36 /*! \brief Base class for observer in observer pattern
38 * When an event occurs, a registered observer is notified by
39 * calling its notifyObserver method with 2 arguments : the object
40 * which has emitted the event and the event type. There is no more
41 * data. It's the responsability of the observer to request all needed
42 * information from the emitting object.
45 class YACSLIBENGINE_EXPORT Observer
48 virtual void notifyObserver(Node* object,const std::string& event);
52 /*! \brief Base class for dispatcher in observer pattern
54 * Dispatcher and Observer objects can be used to be notified about events
55 * that occurs in editing or executing a calculation schema.
57 * When an object wants to notify an event, it calls the dispatch method
58 * of the dispatcher with 2 arguments : the object reference and an event type.
59 * The dispatcher which is a singleton is obtained by calling the class method
61 * The dispatcher notifies all the registered observers by calling their notifyObserver
64 * Observers can be registered by calling the addObserver method with two
65 * arguments : an object reference and an event type. This observer will be
66 * notify with events coming only from this object.
68 * Limitation : emitting objects can be only Node
71 class YACSLIBENGINE_EXPORT Dispatcher
74 virtual void dispatch(Node* object,const std::string& event);
75 virtual void addObserver(Observer* observer,Node* object,const std::string& event);
76 virtual void removeObserver(Observer* observer,Node* object,const std::string& event);
77 virtual void printObservers();
78 static Dispatcher* getDispatcher();
79 static void setDispatcher(Dispatcher* dispatcher);
80 virtual ~Dispatcher();
82 std::map< std::pair<Node*,std::string> , std::set<Observer*> > _observers;
83 std::map< std::pair<Executor*,std::string> , std::set<Observer*> > _observExec;
84 static Dispatcher* _singleton;