00001
00002
00003
00004
00005 #ifndef __I_EVENT_RECEIVER_H_INCLUDED__
00006 #define __I_EVENT_RECEIVER_H_INCLUDED__
00007
00008 #include "ILogger.h"
00009 #include "Keycodes.h"
00010 #include "irrString.h"
00011
00012 namespace irr
00013 {
00015 enum EEVENT_TYPE
00016 {
00018
00022 EET_GUI_EVENT = 0,
00023
00025
00030 EET_MOUSE_INPUT_EVENT,
00031
00033
00035 EET_KEY_INPUT_EVENT,
00036
00038
00045 EET_JOYSTICK_INPUT_EVENT,
00046
00048
00050 EET_LOG_TEXT_EVENT,
00051
00053
00065 EET_USER_EVENT,
00066
00069 EGUIET_FORCE_32_BIT = 0x7fffffff
00070
00071 };
00072
00074 enum EMOUSE_INPUT_EVENT
00075 {
00077 EMIE_LMOUSE_PRESSED_DOWN = 0,
00078
00080 EMIE_RMOUSE_PRESSED_DOWN,
00081
00083 EMIE_MMOUSE_PRESSED_DOWN,
00084
00086 EMIE_LMOUSE_LEFT_UP,
00087
00089 EMIE_RMOUSE_LEFT_UP,
00090
00092 EMIE_MMOUSE_LEFT_UP,
00093
00095 EMIE_MOUSE_MOVED,
00096
00099 EMIE_MOUSE_WHEEL,
00100
00103 EMIE_LMOUSE_DOUBLE_CLICK,
00104
00107 EMIE_RMOUSE_DOUBLE_CLICK,
00108
00111 EMIE_MMOUSE_DOUBLE_CLICK,
00112
00115 EMIE_LMOUSE_TRIPLE_CLICK,
00116
00119 EMIE_RMOUSE_TRIPLE_CLICK,
00120
00123 EMIE_MMOUSE_TRIPLE_CLICK,
00124
00126 EMIE_COUNT
00127 };
00128
00130 enum E_MOUSE_BUTTON_STATE_MASK
00131 {
00132 EMBSM_LEFT = 0x01,
00133 EMBSM_RIGHT = 0x02,
00134 EMBSM_MIDDLE = 0x04,
00135
00137 EMBSM_EXTRA1 = 0x08,
00138
00140 EMBSM_EXTRA2 = 0x10,
00141
00142 EMBSM_FORCE_32_BIT = 0x7fffffff
00143 };
00144
00145 namespace gui
00146 {
00147
00148 class IGUIElement;
00149
00151 enum EGUI_EVENT_TYPE
00152 {
00154
00156 EGET_ELEMENT_FOCUS_LOST = 0,
00157
00159
00160 EGET_ELEMENT_FOCUSED,
00161
00163
00164 EGET_ELEMENT_HOVERED,
00165
00167
00168 EGET_ELEMENT_LEFT,
00169
00171
00173 EGET_ELEMENT_CLOSED,
00174
00176 EGET_BUTTON_CLICKED,
00177
00179 EGET_SCROLL_BAR_CHANGED,
00180
00182 EGET_CHECKBOX_CHANGED,
00183
00185
00186 EGET_LISTBOX_CHANGED,
00187
00189
00190 EGET_LISTBOX_SELECTED_AGAIN,
00191
00193 EGET_FILE_SELECTED,
00194
00196 EGET_DIRECTORY_SELECTED,
00197
00199 EGET_FILE_CHOOSE_DIALOG_CANCELLED,
00200
00202 EGET_MESSAGEBOX_YES,
00203
00205 EGET_MESSAGEBOX_NO,
00206
00208 EGET_MESSAGEBOX_OK,
00209
00211 EGET_MESSAGEBOX_CANCEL,
00212
00214 EGET_EDITBOX_ENTER,
00215
00217 EGET_EDITBOX_CHANGED,
00218
00220 EGET_EDITBOX_MARKING_CHANGED,
00221
00223 EGET_TAB_CHANGED,
00224
00226 EGET_MENU_ITEM_SELECTED,
00227
00229 EGET_COMBO_BOX_CHANGED,
00230
00232 EGET_SPINBOX_CHANGED,
00233
00235 EGET_TABLE_CHANGED,
00236 EGET_TABLE_HEADER_CHANGED,
00237 EGET_TABLE_SELECTED_AGAIN,
00238
00240 EGET_TREEVIEW_NODE_DESELECT,
00241
00243 EGET_TREEVIEW_NODE_SELECT,
00244
00246 EGET_TREEVIEW_NODE_EXPAND,
00247
00249 EGET_TREEVIEW_NODE_COLLAPSE,
00250
00253 EGET_TREEVIEW_NODE_COLLAPS = EGET_TREEVIEW_NODE_COLLAPSE,
00254
00256 EGET_COUNT
00257 };
00258 }
00259
00260
00262 struct SEvent
00263 {
00265 struct SGUIEvent
00266 {
00268 gui::IGUIElement* Caller;
00269
00271 gui::IGUIElement* Element;
00272
00274 gui::EGUI_EVENT_TYPE EventType;
00275
00276 };
00277
00279 struct SMouseInput
00280 {
00282 s32 X;
00283
00285 s32 Y;
00286
00288
00289 f32 Wheel;
00290
00292 bool Shift:1;
00293
00295 bool Control:1;
00296
00300 u32 ButtonStates;
00301
00303 bool isLeftPressed() const { return 0 != ( ButtonStates & EMBSM_LEFT ); }
00304
00306 bool isRightPressed() const { return 0 != ( ButtonStates & EMBSM_RIGHT ); }
00307
00309 bool isMiddlePressed() const { return 0 != ( ButtonStates & EMBSM_MIDDLE ); }
00310
00312 EMOUSE_INPUT_EVENT Event;
00313 };
00314
00316 struct SKeyInput
00317 {
00319 wchar_t Char;
00320
00322 EKEY_CODE Key;
00323
00325 bool PressedDown:1;
00326
00328 bool Shift:1;
00329
00331 bool Control:1;
00332 };
00333
00335
00342 struct SJoystickEvent
00343 {
00344 enum
00345 {
00346 NUMBER_OF_BUTTONS = 32,
00347
00348 AXIS_X = 0,
00349 AXIS_Y,
00350 AXIS_Z,
00351 AXIS_R,
00352 AXIS_U,
00353 AXIS_V,
00354 NUMBER_OF_AXES
00355 };
00356
00359 u32 ButtonStates;
00360
00369 s16 Axis[NUMBER_OF_AXES];
00370
00376 u16 POV;
00377
00379
00381 u8 Joystick;
00382
00384 bool IsButtonPressed(u32 button) const
00385 {
00386 if(button >= (u32)NUMBER_OF_BUTTONS)
00387 return false;
00388
00389 return (ButtonStates & (1 << button)) ? true : false;
00390 }
00391 };
00392
00393
00395 struct SLogEvent
00396 {
00398 const c8* Text;
00399
00401 ELOG_LEVEL Level;
00402 };
00403
00405 struct SUserEvent
00406 {
00408 s32 UserData1;
00409
00411 s32 UserData2;
00412 };
00413
00414 EEVENT_TYPE EventType;
00415 union
00416 {
00417 struct SGUIEvent GUIEvent;
00418 struct SMouseInput MouseInput;
00419 struct SKeyInput KeyInput;
00420 struct SJoystickEvent JoystickEvent;
00421 struct SLogEvent LogEvent;
00422 struct SUserEvent UserEvent;
00423 };
00424
00425 };
00426
00428
00433 class IEventReceiver
00434 {
00435 public:
00436
00438 virtual ~IEventReceiver() {}
00439
00441
00446 virtual bool OnEvent(const SEvent& event) = 0;
00447 };
00448
00449
00451 struct SJoystickInfo
00452 {
00454
00457 u8 Joystick;
00458
00460 core::stringc Name;
00461
00463 u32 Buttons;
00464
00466
00468 u32 Axes;
00469
00471
00473 enum
00474 {
00476 POV_HAT_PRESENT,
00477
00479 POV_HAT_ABSENT,
00480
00482 POV_HAT_UNKNOWN
00483 } PovHat;
00484 };
00485
00486
00487 }
00488
00489 #endif
00490