00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __MYGUI_INPUT_MANAGER_H__
00024 #define __MYGUI_INPUT_MANAGER_H__
00025
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_Macros.h"
00028 #include "MyGUI_Instance.h"
00029 #include "MyGUI_WidgetDefines.h"
00030 #include "MyGUI_IUnlinkWidget.h"
00031 #include "MyGUI_WidgetDefines.h"
00032 #include "MyGUI_XmlDocument.h"
00033 #include "MyGUI_InputDefine.h"
00034 #include "MyGUI_Timer.h"
00035 #include "MyGUI_ILayer.h"
00036 #include "MyGUI_Delegate.h"
00037
00038 namespace MyGUI
00039 {
00040
00041 class MYGUI_EXPORT InputManager : public IUnlinkWidget
00042 {
00043 MYGUI_INSTANCE_HEADER( InputManager )
00044
00045 public:
00046 void initialise();
00047 void shutdown();
00048
00052 bool injectMouseMove(int _absx, int _absy, int _absz);
00056 bool injectMousePress(int _absx, int _absy, MouseButton _id);
00060 bool injectMouseRelease(int _absx, int _absy, MouseButton _id);
00061
00065 bool injectKeyPress(KeyCode _key, Char _text = 0);
00069 bool injectKeyRelease(KeyCode _key);
00070
00072 bool isFocusMouse() { return mWidgetMouseFocus != nullptr; }
00074 bool isFocusKey() { return mWidgetKeyFocus != nullptr; }
00076 bool isCaptureMouse() { return mIsWidgetMouseCapture; }
00077
00079 void setKeyFocusWidget(Widget* _widget);
00081 void resetKeyFocusWidget(Widget* _widget);
00083 void resetKeyFocusWidget() { setKeyFocusWidget(nullptr); }
00084
00086 Widget* getMouseFocusWidget() { return mWidgetMouseFocus; }
00088 Widget* getKeyFocusWidget() { return mWidgetKeyFocus; }
00090 const IntPoint& getLastLeftPressed() { return mLastLeftPressed; }
00092 const IntPoint& getMousePosition() { return mMousePosition; }
00093
00094 IntPoint getMousePositionByLayer();
00095
00096
00098 void resetMouseFocusWidget();
00099
00100
00102 void addWidgetModal(Widget* _widget);
00104 void removeWidgetModal(Widget* _widget);
00105
00107 bool isModalAny() { return !mVectorModalRootWidget.empty(); }
00108
00110 bool isControlPressed() { return mIsControlPressed; }
00112 bool isShiftPressed() { return mIsShiftPressed; }
00113
00117 void resetMouseCaptureWidget() { mIsWidgetMouseCapture = false; }
00118
00119 void unlinkWidget(Widget* _widget) { _unlinkWidget(_widget); }
00120
00125 delegates::CMultiDelegate1<Widget*>
00126 eventChangeMouseFocus;
00127
00132 delegates::CMultiDelegate1<Widget*>
00133 eventChangeKeyFocus;
00134
00135 private:
00136
00137 void _unlinkWidget(Widget* _widget);
00138
00139 void frameEntered(float _frame);
00140
00141 void firstEncoding(KeyCode _key, bool bIsKeyPressed);
00142
00143
00144 void storeKey(KeyCode _key, Char _text);
00145
00146
00147 void resetKey();
00148
00149 private:
00150
00151 Widget* mWidgetMouseFocus;
00152 Widget* mWidgetKeyFocus;
00153 ILayer* mLayerMouseFocus;
00154
00155 bool mIsWidgetMouseCapture;
00156
00157 Timer mTimer;
00158
00159
00160 bool mIsShiftPressed;
00161
00162 bool mIsControlPressed;
00163
00164 IntPoint mLastLeftPressed;
00165 IntPoint mMousePosition;
00166
00167 KeyCode mHoldKey;
00168 Char mHoldChar;
00169 bool mFirstPressKey;
00170 float mTimerKey;
00171 int mOldAbsZ;
00172
00173
00174 VectorWidgetPtr mVectorModalRootWidget;
00175
00176 };
00177
00178 }
00179
00180 #endif // __MYGUI_INPUT_MANAGER_H__