00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __EVENT_HANDLER_H__
00013 #define __EVENT_HANDLER_H__
00014
00015 #include <wx/timer.h>
00016 #include <vector>
00017 #include <list>
00018 #include "msgqueue.h"
00019 #include "events.h"
00020 #include "parameter.h"
00021
00022
00023 namespace VRUT
00024 {
00026 class EventHandler : public wxEvtHandler
00027 {
00028 protected:
00029 typedef std::vector<MODULE_ID> ModuleIDList;
00030 typedef std::vector<ModuleIDList> EventModuleList;
00031 typedef std::vector<wxEvtHandler *> HandlerList;
00032 typedef std::vector<HandlerList> EventHandlerList;
00033 typedef std::vector<MODULE_ID> KernelModuleIDList;
00034 WX_DECLARE_HASH_MAP( SCENE_ID, bool, wxIntegerHash, wxIntegerEqual, SceneList );
00035
00037 EventModuleList moduleListeners;
00039 EventHandlerList listeners;
00041 MessageQueue<wxCommandEvent> evtQueue;
00043 KernelModuleIDList kernelModules;
00045 wxTimer timer;
00047 bool cloneSceneData;
00049 Parameter::ParameterIdentificator cloneSceneDataParamID;
00051 unsigned evtsPerIteration;
00053 Parameter::ParameterIdentificator evtsPerIterationParamID;
00055 unsigned evtCheckInterval;
00057 Parameter::ParameterIdentificator evtCheckIntervalParamID;
00059 SceneList scenesToRender;
00061 Parameter::ParameterIdentificator logSyncEveryMsgParamID;
00062
00065 bool processEvents();
00067 void onIdle(wxIdleEvent & evt);
00069 void onTimer(wxTimerEvent & WXUNUSED(evt));
00071 void onLogEvent(wxCommandEvent & evt);
00073 void onCommandEvent(wxCommandEvent & evt);
00075 void onKeyEvent(wxKeyEvent & evt);
00077 void onMouseEvent(wxMouseEvent & evt);
00079 void onSceneEvent(wxCommandEvent & evt);
00080
00082 void distributeToListeners(wxCommandEvent & evt);
00083
00084 public:
00086 EventHandler();
00088 virtual ~EventHandler();
00089
00093 void ReleaseEvent(wxCommandEvent & evt, bool forceSceneData = false);
00095 static wxCommandEvent CloneEvent(const wxCommandEvent & evt);
00099 void RegisterListener(const MODULE_ID & id, const Event::EVENT_TYPE eventType);
00104 void RegisterListener(wxEvtHandler * handler, const Event::EVENT_TYPE eventType);
00108 void UnregisterListener(const MODULE_ID & id, const Event::EVENT_TYPE eventType = Event::EVT_LOWEST);
00112 void UnregisterListener(wxEvtHandler * handler, const Event::EVENT_TYPE eventType = Event::EVT_LOWEST);
00114 void RegisterKernelModule(const MODULE_ID & id);
00118 void PostEvent(wxCommandEvent & evt, bool highPriority = false);
00120 void ProcessEventsFrom(MODULE_HANDLE_ID hid);
00121
00122 friend class EventManager;
00123 };
00124 };
00125
00126
00127 #endif