00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __LIBS_GUI_UTILS_INTERFACE_DISPATCHER_H_
00025 #define __LIBS_GUI_UTILS_INTERFACE_DISPATCHER_H_
00026
00027 #include <glibmm/dispatcher.h>
00028 #include <blackboard/interface_listener.h>
00029 #include <core/utils/lock_queue.h>
00030
00031 namespace fawkes {
00032 class Interface;
00033
00034 class InterfaceDispatcher
00035 : public BlackBoardInterfaceListener
00036 {
00037 public:
00038 InterfaceDispatcher(const char *listener_name, fawkes::Interface *iface,
00039 bool message_enqueueing = true);
00040
00041 void set_message_enqueueing(bool enqueue);
00042
00043 sigc::signal<void, Interface *> signal_data_changed();
00044 sigc::signal<void, Interface *, Message *> signal_message_received();
00045 sigc::signal<void, Interface *> signal_writer_added();
00046 sigc::signal<void, Interface *> signal_writer_removed();
00047 sigc::signal<void, Interface *> signal_reader_added();
00048 sigc::signal<void, Interface *> signal_reader_removed();
00049
00050 virtual void bb_interface_data_changed(Interface *interface) throw();
00051 virtual bool bb_interface_message_received(Interface *interface, Message *message) throw();
00052 virtual void bb_interface_writer_added(Interface *interface,
00053 unsigned int instance_serial) throw();
00054 virtual void bb_interface_writer_removed(Interface *interface,
00055 unsigned int instance_serial) throw();
00056 virtual void bb_interface_reader_added(Interface *interface,
00057 unsigned int instance_serial) throw();
00058 virtual void bb_interface_reader_removed(Interface *interface,
00059 unsigned int instance_serial) throw();
00060
00061 protected:
00062 virtual void on_data_changed();
00063 virtual void on_message_received();
00064 virtual void on_writer_added();
00065 virtual void on_writer_removed();
00066 virtual void on_reader_added();
00067 virtual void on_reader_removed();
00068
00069
00070 private:
00071 bool __message_enqueueing;
00072
00073 Glib::Dispatcher __dispatcher_data_changed;
00074 Glib::Dispatcher __dispatcher_message_received;
00075 Glib::Dispatcher __dispatcher_writer_added;
00076 Glib::Dispatcher __dispatcher_writer_removed;
00077 Glib::Dispatcher __dispatcher_reader_added;
00078 Glib::Dispatcher __dispatcher_reader_removed;
00079
00080 sigc::signal<void, Interface *> __signal_data_changed;
00081 sigc::signal<void, Interface *, Message *> __signal_message_received;
00082 sigc::signal<void, Interface *> __signal_writer_added;
00083 sigc::signal<void, Interface *> __signal_writer_removed;
00084 sigc::signal<void, Interface *> __signal_reader_added;
00085 sigc::signal<void, Interface *> __signal_reader_removed;
00086
00087 LockQueue<Interface *> __queue_data_changed;
00088 LockQueue<std::pair<Interface *, Message *> > __queue_message_received;
00089 LockQueue<Interface *> __queue_writer_added;
00090 LockQueue<Interface *> __queue_writer_removed;
00091 LockQueue<Interface *> __queue_reader_added;
00092 LockQueue<Interface *> __queue_reader_removed;
00093 };
00094
00095 }
00096
00097 #endif