00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(_XRB_EVENTHANDLER_HPP_)
00012 #define _XRB_EVENTHANDLER_HPP_
00013
00014 #include "xrb.hpp"
00015
00016 namespace Xrb
00017 {
00018
00019 class Event;
00020 class EventQueue;
00021
00026 class EventHandler
00027 {
00028 public:
00029
00036 EventHandler (EventQueue *owner_event_queue);
00041 virtual ~EventHandler ();
00042
00047 bool ProcessEvent (Event const *e);
00056 void EnqueueEvent (Event const *e);
00057
00063 inline EventQueue *OwnerEventQueue () const
00064 {
00065 return m_owner_event_queue;
00066 }
00071 inline bool IsBlockingEvents () const
00072 {
00073 return m_is_blocking_events;
00074 }
00078 inline Float MostRecentEventTime () const
00079 {
00080 return Max(m_most_recent_event_time, 0.0f);
00081 }
00087 inline Float EventTime () const
00088 {
00089 ASSERT1(m_event_dt >= 0.0);
00090 return m_current_event_time;
00091 }
00097 inline Float EventDT () const
00098 {
00099 ASSERT1(m_event_dt >= 0.0);
00100 return m_event_dt;
00101 }
00102
00107 inline void SetIsBlockingEvents (bool const is_blocking_events)
00108 {
00109 m_is_blocking_events = is_blocking_events;
00110 }
00111
00112 protected:
00113
00120 inline void SetOwnerEventQueue (EventQueue *const owner_event_queue)
00121 {
00122 m_owner_event_queue = owner_event_queue;
00123 }
00124
00131 virtual bool HandleEvent (Event const *e) = 0;
00132
00133 private:
00134
00135
00136 EventQueue *m_owner_event_queue;
00137
00138 bool m_is_blocking_events;
00139
00140 Float m_most_recent_event_time;
00141
00142 Float m_current_event_time;
00143
00144 Float m_event_dt;
00145 };
00146
00147 }
00148
00149 #endif // !defined(_XRB_EVENTHANDLER_HPP_)
00150