14 #ifndef _HEVENTLISTENER_H
15 #define _HEVENTLISTENER_H
32 #define HLISTENER_PASS_EVENT 0
33 #define HLISTENER_CONSUME_EVENT 999
36 #define HLISTENER_PRIORITY_NORMAL 5
38 #define HLISTENER_PRIORITY_HIGH 10
40 #define HLISTENER_PRIORITY_LOW 0
56 #ifndef DOXYGEN_SHOULD_SKIP_THIS
58 #define HLISTENER_EVENT(listenertype, manager, function) { listenertype *el = (listenertype *)manager->GetEventListenerManager(listenertype::GetType()); \
61 #define HLISTENER_EVENT_STRING(listenertype, manager, function) { listenertype *el = (listenertype *)manager->GetEventListenerManager(listenertype::GetStringType()); \
65 #define HLISTENER_FUNCTION_0(classname, method) \
66 virtual int method() { \
67 if (!m_pEventListenerManager) \
69 m_pEventListenerManager->StartQuery(); \
70 classname* listener; \
71 while ((listener = (classname*)m_pEventListenerManager->GetEventListener()) != 0) \
72 if (listener->method() == HLISTENER_CONSUME_EVENT) \
77 #define HLISTENER_FUNCTION_1(classname, method, param_type_1, param_1) \
78 virtual int method( param_type_1 param_1 ) { \
79 if (!m_pEventListenerManager) \
81 m_pEventListenerManager->StartQuery(); \
82 classname* listener; \
83 while ((listener = (classname*)m_pEventListenerManager->GetEventListener()) != 0) \
84 if (listener->method( param_1 ) == HLISTENER_CONSUME_EVENT) \
88 #define HLISTENER_FUNCTION_2(classname, method, param_type_1, param_1, param_type_2, param_2) \
89 virtual int method( param_type_1 param_1 , param_type_2 param_2) { \
90 if (!m_pEventListenerManager) \
92 m_pEventListenerManager->StartQuery(); \
93 classname* listener; \
94 while ((listener = (classname*)m_pEventListenerManager->GetEventListener()) != 0) \
95 if (listener->method( param_1, param_2) == HLISTENER_CONSUME_EVENT) \
99 #define HLISTENER_FUNCTION_3(classname, method, param_type_1, param_1, param_type_2, param_2, param_type_3, param_3) \
100 virtual int method( param_type_1 param_1 , param_type_2 param_2, param_type_3 param_3) { \
101 if (!m_pEventListenerManager) \
103 m_pEventListenerManager->StartQuery(); \
104 classname* listener; \
105 while ((listener = (classname*)m_pEventListenerManager->GetEventListener()) != 0) \
106 if (listener->method( param_1, param_2, param_3) == HLISTENER_CONSUME_EVENT) \
110 #define HLISTENER_SETUP_FUNCTIONS(listenertype) \
111 static HEventListenerType GetType() { return listenertype##Type; } \
112 virtual HEventListener *CreateListenerManager() \
113 { HEventListener *temp = (HEventListener *)new listenertype(); \
114 temp->ConvertToManager(); \
118 #define HLISTENER_SETUP_FUNCTIONS_STRING(listenertype, stringtype) \
119 static HEventListenerType GetType() { return HUserdefinerListenerType; } \
120 static const char * GetStringType() { return stringtype; } \
121 virtual HEventListener *CreateListenerManager() \
122 { HEventListener *temp = (HEventListener *)new listenertype(); \
123 temp->ConvertToManager(); \
127 #endif //DOXYGEN_SHOULD_SKIP_THIS
129 class HMouseListenerManager;
130 class HUpdateListenerManager;
153 void AddEventListener(
HEventListener *eventlistener,
int priority);
202 if (m_pEventListenerManager)
203 delete m_pEventListenerManager;
209 if (m_pEventListenerManager == 0)
239 #ifndef DOXYGEN_SHOULD_SKIP_THIS
249 HLISTENER_SETUP_FUNCTIONS(HUpdateListener);
250 HLISTENER_FUNCTION_1(HUpdateListener, CameraChangedEvent,
HBaseView *, view);
251 HLISTENER_FUNCTION_2(HUpdateListener, UpdateEvent,
bool, antialias,
bool, forceUpdate);
252 HLISTENER_FUNCTION_1(HUpdateListener, ViewDestroyedEvent,
HBaseView *, view);
253 HLISTENER_FUNCTION_1(HUpdateListener, SmoothTransitionFinishedEvent,
HBaseView *, view);
265 HLISTENER_SETUP_FUNCTIONS(HFitWorldListener);
266 HLISTENER_FUNCTION_1(HFitWorldListener, PreFitWorldEvent,
HBaseView *, view);
267 HLISTENER_FUNCTION_1(HFitWorldListener, PostFitWorldEvent,
HBaseView *, view);
278 HLISTENER_SETUP_FUNCTIONS(HObjectManipulationListener);
279 HLISTENER_FUNCTION_3(HObjectManipulationListener, SetupHandlesEvent,
HBaseView *, view, HC_KEY, key,
bool, complex);
280 HLISTENER_FUNCTION_3(HObjectManipulationListener, ObjectBeforeMoveEvent,
HBaseView *, view, HC_KEY, key,
HPoint *, p);
281 HLISTENER_FUNCTION_3(HObjectManipulationListener, ObjectMovedEvent,
HBaseView *, view, HC_KEY, key,
HPoint *, p);
282 HLISTENER_FUNCTION_3(HObjectManipulationListener, ObjectScaledEvent,
HBaseView *, view, HC_KEY, key,
HPoint &, p);
294 HLISTENER_SETUP_FUNCTIONS(HAnimationListener)
296 HLISTENER_FUNCTION_1(HAnimationListener, AnimationFinishedEvent,
HBhvAnimation *, ainst)
297 HLISTENER_FUNCTION_1(HAnimationListener, KeyframeEditorExistsQuery,
bool &, res)
298 HLISTENER_FUNCTION_0(HAnimationListener, KeyframeAddedEvent)
299 HLISTENER_FUNCTION_1(HAnimationListener, ObjectCollisionEvent,
HBhvTargetObject *, tob)
300 HLISTENER_FUNCTION_1(HAnimationListener, ObjectNoCollisionEvent, HBhvTargetObject *, tob)
312 HLISTENER_SETUP_FUNCTIONS(HSensorListener)
313 HLISTENER_FUNCTION_1(HSensorListener, SensorActivatedEvent,
HBhvSensor *, sensor)
314 HLISTENER_FUNCTION_1(HSensorListener, SensorActionEvent, const
char *, action)
321 class MVO_API HMouseListener : public HEventListener
327 HLISTENER_SETUP_FUNCTIONS(HMouseListener)
329 HLISTENER_FUNCTION_1(HMouseListener, OnLButtonDown,
HEventInfo &, hevent)
330 HLISTENER_FUNCTION_1(HMouseListener, OnMouseMove, HEventInfo &, hevent)
331 HLISTENER_FUNCTION_1(HMouseListener, OnLButtonUp, HEventInfo &, hevent)
332 HLISTENER_FUNCTION_1(HMouseListener, OnLButtonDblClk, HEventInfo &, hevent)
333 HLISTENER_FUNCTION_1(HMouseListener, OnMButtonDown, HEventInfo &, hevent)
334 HLISTENER_FUNCTION_1(HMouseListener, OnMButtonUp, HEventInfo &, hevent)
335 HLISTENER_FUNCTION_1(HMouseListener, OnMButtonDblClk, HEventInfo &, hevent)
336 HLISTENER_FUNCTION_1(HMouseListener, OnRButtonDown, HEventInfo &, hevent)
337 HLISTENER_FUNCTION_1(HMouseListener, OnRButtonUp, HEventInfo &, hevent)
338 HLISTENER_FUNCTION_1(HMouseListener, OnRButtonDblClk, HEventInfo &, hevent)
339 HLISTENER_FUNCTION_1(HMouseListener, OnMouseWheel, HEventInfo &, hevent)
340 HLISTENER_FUNCTION_1(HMouseListener, OnKeyDown, HEventInfo &, hevent)
341 HLISTENER_FUNCTION_1(HMouseListener, OnKeyUp, HEventInfo &, hevent)
342 HLISTENER_FUNCTION_1(HMouseListener, OnTouchesDown, HEventInfo &, hevent)
343 HLISTENER_FUNCTION_1(HMouseListener, OnTouchesMove, HEventInfo &, hevent)
344 HLISTENER_FUNCTION_1(HMouseListener, OnTouchesUp, HEventInfo &, hevent)
349 class MVO_API HJoyStickListener : public HEventListener
355 HLISTENER_SETUP_FUNCTIONS(HJoyStickListener)
357 HLISTENER_FUNCTION_1(HJoyStickListener, OnJoyStickRotation, HEventInfo &, hevent)
358 HLISTENER_FUNCTION_1(HJoyStickListener, OnJoyStickTranslation, HEventInfo &, hevent)
359 HLISTENER_FUNCTION_1(HJoyStickListener, OnJoyStickButton, HEventInfo &, hevent)
362 #endif //DOXYGEN_SHOULD_SKIP_THIS
void ConvertToManager()
Definition: HEventListener.h:208
self-explanatory
Definition: HEventListener.h:46
bool m_bQueryInProgress
Definition: HEventListener.h:182
virtual HEventListener * CreateListenerManager()
Definition: HEventListener.h:217
int m_RequestedPriority
Definition: HEventListener.h:234
HEventListenerManager * m_pEventListenerManager
Definition: HEventListener.h:233
HEventListener()
Definition: HEventListener.h:200
The HEventListener class is the base class for all event types.
Definition: HEventListener.h:194
The HBhvTargetObject class encapsulates various target types for animations and sensors.
Definition: HBhvBehaviorManager.h:82
Listens for mouse events like mouse moves and double clicks.
Definition: HEventListener.h:48
The HBhvSensor class encapsulates an animation sensor.
Definition: HBhvSensor.h:33
Listens when sensors are activated.
Definition: HEventListener.h:50
The HPoint class is the data type of a three-dimensional point.
Definition: HGlobals.h:121
The HBaseView class defines and manages a view of model information.
Definition: HBaseView.h:332
int GetRequestedPriority()
Definition: HEventListener.h:231
Listens for animation events like when key frames are added or when objects collide.
Definition: HEventListener.h:49
HEventListenerType
Definition: HEventListener.h:45
The HBhvAnimation class defines an animation.
Definition: HBhvAnimation.h:43
void SetRequestedPriority(int v)
Definition: HEventListener.h:226
HEventListenerManager * GetEventListenerManager()
Definition: HEventListener.h:221
The HEventInfo class stores and manages event information.
Definition: HEventInfo.h:207
Listens for 3DMouse/Joystick translation and rotation events.
Definition: HEventListener.h:53
The HEventListenerManager class is used to dispatch event for a specific type.
Definition: HEventListener.h:137
Listens for when fit world event will happen.
Definition: HEventListener.h:51
Listens for object manipulation events like when objects are moved or scaled.
Definition: HEventListener.h:52
Listens for update events like camera changed or view destroyed.
Definition: HEventListener.h:47
Interface of the HEventInfo class.
struct vlist_s * m_pEventListenerList
Definition: HEventListener.h:181