1 #include <msp/time/utils.h>
3 #include "eventdispatcher.h"
4 #include "eventobject.h"
10 EventDispatcher::EventDispatcher()
13 EventDispatcher::~EventDispatcher()
16 void EventDispatcher::add(EventObject &obj)
18 SlotMap::iterator i = objects.find(&obj);
21 i = objects.insert(SlotMap::value_type(&obj, Slot(&obj))).first;
22 i->second.evch_conn = obj.signal_events_changed.connect(sigc::bind(sigc::mem_fun(this, &EventDispatcher::object_events_changed), &obj));
23 i->second.del_conn = obj.signal_deleted.connect(sigc::bind(sigc::mem_fun(this, &EventDispatcher::object_deleted), &obj));
26 poller.set_object(obj, obj.get_events());
30 void EventDispatcher::remove(EventObject &obj)
32 SlotMap::iterator i = objects.find(&obj);
35 i->second.evch_conn.disconnect();
36 i->second.del_conn.disconnect();
39 poller.set_object(obj, P_NONE);
43 void EventDispatcher::tick()
52 void EventDispatcher::tick(const Time::TimeDelta &dt)
61 void EventDispatcher::tick(const Time::Timer &timer)
63 const Time::TimeStamp &timeout = timer.get_next_timeout();
65 tick(timeout-Time::now());
70 void EventDispatcher::object_events_changed(PollEvent ev, EventObject *obj)
72 poller.set_object(*obj, ev);
75 void EventDispatcher::object_deleted(EventObject *obj)
80 void EventDispatcher::dispatch()
82 const Poller::SlotList &result = poller.get_result();
83 for(Poller::SlotList::const_iterator i=result.begin(); i!=result.end(); ++i)
84 i->object->event(i->events);