|
IrrlichtEngine
|
00001 // Copyright (C) 2002-2011 Nikolaus Gebhardt 00002 // This file is part of the "Irrlicht Engine". 00003 // For conditions of distribution and use, see copyright notice in irrlicht.h 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 } // end namespace gui 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, // e.g. analog stick 1 left to right 00349 AXIS_Y, // e.g. analog stick 1 top to bottom 00350 AXIS_Z, // e.g. throttle, or analog 2 stick 2 left to right 00351 AXIS_R, // e.g. rudder, or analog 2 stick 2 top to bottom 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 }; // struct SJoystickInfo 00485 00486 00487 } // end namespace irr 00488 00489 #endif 00490