IrrlichtEngine
IEventReceiver.h
Go to the documentation of this file.
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