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