00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __MANIP_MODULE_H__
00013 #define __MANIP_MODULE_H__
00014
00015 #include <wx/event.h>
00016 #include "scenemodule.h"
00017 #include "common.h"
00018
00019
00020 namespace VRUT
00021 {
00023 class ManipulatorModule : public SceneModule
00024 {
00025 protected:
00027 MessageQueue<wxKeyEvent> keyEvtQueue;
00029 MessageQueue<wxMouseEvent> msEvtQueue;
00031 long keyEventTimeout;
00033 Parameter::ParameterIdentificator keyEventTimeoutParamID;
00035 long msEventTimeout;
00037 Parameter::ParameterIdentificator msEventTimeoutParamID;
00039 NODE_ID nodeID;
00041 Parameter::ParameterIdentificator nodeIDParamID;
00042
00044 virtual void processEvent(wxCommandEvent & evt)
00045 {
00046 SceneModule::processEvent(evt);
00047 switch (evt.GetEventType())
00048 {
00049 case Event::EVT_PARAM_SET:
00050 UPDATE_PARAM_FROM_EVENT_LONG(keyEventTimeoutParamID, keyEventTimeout, evt);
00051 UPDATE_PARAM_FROM_EVENT_LONG(msEventTimeoutParamID, msEventTimeout, evt);
00052 UPDATE_PARAM_FROM_EVENT_ID(nodeIDParamID, nodeID, evt);
00053 break;
00054 default:
00055 break;
00056 }
00057 }
00059 virtual void processKeyEvent(wxKeyEvent & evt) = 0;
00061 virtual void processMouseEvent(wxMouseEvent & evt) = 0;
00064 virtual void processNextEvent()
00065 {
00066 SceneModule::processNextEvent();
00067
00068 MessageQueueError err;
00069 wxKeyEvent kevt = keyEvtQueue.ReceiveTimeout(keyEventTimeout, err);
00070 if (err == wxMSGQUEUE_NO_ERROR)
00071 processKeyEvent(kevt);
00072
00073 wxMouseEvent mevt = msEvtQueue.ReceiveTimeout(msEventTimeout, err);
00074 if (err == wxMSGQUEUE_NO_ERROR)
00075 processMouseEvent(mevt);
00076 }
00077
00078 public:
00080 ManipulatorModule(const MODULE_ID & _id, const wxString & _name, unsigned _type, EventHandler * msgSink)
00081 : SceneModule(_id, _name, (_type | MODULE_TYPE_MANIPULATOR), msgSink),
00082 keyEventTimeoutParamID(_name, wxT("keyEventTimeout"), _id),
00083 msEventTimeoutParamID(_name, wxT("msEventTimeout"), _id)
00084 {
00086 SET_DEFAULT_PARAM(eventTimeoutParamID, wxT("0"));
00087 keyEventTimeout = 10;
00088 REGISTER_PARAM(keyEventTimeoutParamID, wxT("10"));
00089 msEventTimeout = 10;
00090 REGISTER_PARAM(msEventTimeoutParamID, wxT("10"));
00091 nodeID = NODE_ID_NONE;
00092 REGISTER_PARAM_GUI_TEXTCONTROL(nodeIDParamID, wxT("nodeID"), wxString::Format(wxT("%i"), NODE_ID_NONE), wxT("Manipulated node ID."));
00093 REGISTER_LISTENER(Event::EVT_INPUT_KEY);
00094 REGISTER_LISTENER(Event::EVT_INPUT_MOUSE);
00095 }
00097 virtual ~ManipulatorModule()
00098 {
00099 }
00100
00102 void PostKeyEvent(wxKeyEvent & evt)
00103 {
00104 MessageQueueError err = keyEvtQueue.Post(evt);
00105 wxASSERT_MSG(err == wxMSGQUEUE_NO_ERROR, wxT("<ManipulatorModule>Error posting key event - exceeded message queue limit"));
00106 }
00108 void PostMouseEvent(wxMouseEvent & evt)
00109 {
00110 MessageQueueError err = msEvtQueue.Post(evt);
00111 wxASSERT_MSG(err == wxMSGQUEUE_NO_ERROR, wxT("<ManipulatorModule>Error posting mouse event - exceeded message queue limit"));
00112 }
00113 };
00114 };
00115
00116 #endif