]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/dispatcher.hh
Merge branch 'master' of ssh://jneem@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / include / dispatcher.hh
1 /*
2   dispatcher.hh -- declare Dispatcher
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005 Erik Sandberg  <mandolaerik@gmail.com>
7 */
8
9 #ifndef DISPATCHER_HH
10 #define DISPATCHER_HH
11
12 #include "listener.hh"
13 #include "stream-event.hh"
14
15 class Dispatcher
16 {
17   /* Hash table. Each event-class maps to a list of listeners. */
18   SCM listeners_;
19   /* alist of dispatchers that we listen to. Each entry is a
20      (dist . priority) pair. */
21   SCM dispatchers_;
22   SCM listen_classes_;
23   DECLARE_LISTENER (dispatch);
24   /* priority counter. Listeners with low priority receive events
25      first. */
26   int priority_count_;
27   void internal_add_listener (Listener, SCM event_class, int priority);
28 public:
29   Dispatcher ();
30   void broadcast (Stream_event *ev);
31   void add_listener (Listener, SCM event_class);
32   void remove_listener (Listener, SCM event_class);
33   void register_as_listener (Dispatcher *dist);
34   void unregister_as_listener (Dispatcher *dist);
35 protected:
36   DECLARE_SMOBS (Dispatcher);
37 };
38
39 DECLARE_UNSMOB (Dispatcher, dispatcher);
40
41 #endif // DISPATCHER_HH