1 // Copyright (C) 2006-2008 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
19 #ifndef __DISPATCHER_HXX__
20 #define __DISPATCHER_HXX__
33 /*! \brief Base class for observer in observer pattern
35 * When an event occurs, a registered observer is notified by
36 * calling its notifyObserver method with 2 arguments : the object
37 * which has emitted the event and the event type. There is no more
38 * data. It's the responsability of the observer to request all needed
39 * information from the emitting object.
45 virtual void notifyObserver(Node* object,const std::string& event);
49 /*! \brief Base class for dispatcher in observer pattern
51 * Dispatcher and Observer objects can be used to be notified about events
52 * that occurs in editing or executing a calculation schema.
54 * When an object wants to notify an event, it calls the dispatch method
55 * of the dispatcher with 2 arguments : the object reference and an event type.
56 * The dispatcher which is a singleton is obtained by calling the class method
58 * The dispatcher notifies all the registered observers by calling their notifyObserver
61 * Observers can be registered by calling the addObserver method with two
62 * arguments : an object reference and an event type. This observer will be
63 * notify with events coming only from this object.
65 * Limitation : emitting objects can be only Node
71 virtual void dispatch(Node* object,const std::string& event);
72 virtual void addObserver(Observer* observer,Node* object,const std::string& event);
73 virtual void removeObserver(Observer* observer,Node* object,const std::string& event);
74 virtual void printObservers();
75 static Dispatcher* getDispatcher();
76 static void setDispatcher(Dispatcher* dispatcher);
77 virtual ~Dispatcher();
79 std::map< std::pair<Node*,std::string> , std::set<Observer*> > _observers;
80 std::map< std::pair<Executor*,std::string> , std::set<Observer*> > _observExec;
81 static Dispatcher* _singleton;