mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-22 13:53:53 +00:00
181 lines
5.5 KiB
C
181 lines
5.5 KiB
C
|
/*!
|
|||
|
@file
|
|||
|
@author Albert Semenov
|
|||
|
@date 11/2007
|
|||
|
@module
|
|||
|
*/
|
|||
|
/*
|
|||
|
This file is part of MyGUI.
|
|||
|
|
|||
|
MyGUI is free software: you can redistribute it and/or modify
|
|||
|
it under the terms of the GNU Lesser General Public License as published by
|
|||
|
the Free Software Foundation, either version 3 of the License, or
|
|||
|
(at your option) any later version.
|
|||
|
|
|||
|
MyGUI is distributed in the hope that it will be useful,
|
|||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
GNU Lesser General Public License for more details.
|
|||
|
|
|||
|
You should have received a copy of the GNU Lesser General Public License
|
|||
|
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
*/
|
|||
|
#ifndef __MYGUI_INPUT_MANAGER_H__
|
|||
|
#define __MYGUI_INPUT_MANAGER_H__
|
|||
|
|
|||
|
#include "MyGUI_Prerequest.h"
|
|||
|
#include "MyGUI_Macros.h"
|
|||
|
#include "MyGUI_Instance.h"
|
|||
|
#include "MyGUI_WidgetDefines.h"
|
|||
|
#include "MyGUI_IUnlinkWidget.h"
|
|||
|
#include "MyGUI_WidgetDefines.h"
|
|||
|
#include "MyGUI_XmlDocument.h"
|
|||
|
#include "MyGUI_InputDefine.h"
|
|||
|
#include "MyGUI_Timer.h"
|
|||
|
#include "MyGUI_ILayer.h"
|
|||
|
#include "MyGUI_Delegate.h"
|
|||
|
|
|||
|
namespace MyGUI
|
|||
|
{
|
|||
|
|
|||
|
class MYGUI_EXPORT InputManager : public IUnlinkWidget
|
|||
|
{
|
|||
|
MYGUI_INSTANCE_HEADER( InputManager )
|
|||
|
|
|||
|
public:
|
|||
|
void initialise();
|
|||
|
void shutdown();
|
|||
|
|
|||
|
/** Inject MouseMove event
|
|||
|
@return true if event has been processed by GUI
|
|||
|
*/
|
|||
|
bool injectMouseMove(int _absx, int _absy, int _absz);
|
|||
|
/** Inject MousePress event
|
|||
|
@return true if event has been processed by GUI
|
|||
|
*/
|
|||
|
bool injectMousePress(int _absx, int _absy, MouseButton _id);
|
|||
|
/** Inject MouseRelease event
|
|||
|
@return true if event has been processed by GUI
|
|||
|
*/
|
|||
|
bool injectMouseRelease(int _absx, int _absy, MouseButton _id);
|
|||
|
|
|||
|
/** Inject KeyPress event
|
|||
|
@return true if event has been processed by GUI
|
|||
|
*/
|
|||
|
bool injectKeyPress(KeyCode _key, Char _text = 0);
|
|||
|
/** Inject KeyRelease event
|
|||
|
@return true if event has been processed by GUI
|
|||
|
*/
|
|||
|
bool injectKeyRelease(KeyCode _key);
|
|||
|
|
|||
|
/** Is any widget have mouse focus */
|
|||
|
bool isFocusMouse() { return mWidgetMouseFocus != nullptr; }
|
|||
|
/** Is any widget have key focus */
|
|||
|
bool isFocusKey() { return mWidgetKeyFocus != nullptr; }
|
|||
|
/** Is any widget captured mouse */
|
|||
|
bool isCaptureMouse() { return mIsWidgetMouseCapture; }
|
|||
|
|
|||
|
/** Set key focus for _widget */
|
|||
|
void setKeyFocusWidget(Widget* _widget);
|
|||
|
/** Drop key focus for _widget */
|
|||
|
void resetKeyFocusWidget(Widget* _widget);
|
|||
|
/** Drop any key focus */
|
|||
|
void resetKeyFocusWidget() { setKeyFocusWidget(nullptr); }
|
|||
|
|
|||
|
/** Get mouse focused widget */
|
|||
|
Widget* getMouseFocusWidget() { return mWidgetMouseFocus; }
|
|||
|
/** Get key focused widget */
|
|||
|
Widget* getKeyFocusWidget() { return mWidgetKeyFocus; }
|
|||
|
/** Get position of last left mouse button press */
|
|||
|
const IntPoint& getLastLeftPressed() { return mLastLeftPressed; }
|
|||
|
/** Get current mouse position */
|
|||
|
const IntPoint& getMousePosition() { return mMousePosition; }
|
|||
|
|
|||
|
IntPoint getMousePositionByLayer();
|
|||
|
|
|||
|
// тестовый вариант, очистка фокуса мыши
|
|||
|
/** Drop any mouse focus */
|
|||
|
void resetMouseFocusWidget();
|
|||
|
|
|||
|
// работа с модальными окнами
|
|||
|
/** Add modal widget - all other widgets inaccessible while modal widget exist */
|
|||
|
void addWidgetModal(Widget* _widget);
|
|||
|
/** Remove modal widget */
|
|||
|
void removeWidgetModal(Widget* _widget);
|
|||
|
|
|||
|
/** Return true if any modal widget exist */
|
|||
|
bool isModalAny() { return !mVectorModalRootWidget.empty(); }
|
|||
|
|
|||
|
/** Is control button pressed */
|
|||
|
bool isControlPressed() { return mIsControlPressed; }
|
|||
|
/** Is shift button pressed */
|
|||
|
bool isShiftPressed() { return mIsShiftPressed; }
|
|||
|
|
|||
|
/** Reset mouse capture (for example when we dragging and application
|
|||
|
lost focus you should call this)
|
|||
|
*/
|
|||
|
void resetMouseCaptureWidget() { mIsWidgetMouseCapture = false; }
|
|||
|
|
|||
|
void unlinkWidget(Widget* _widget) { _unlinkWidget(_widget); }
|
|||
|
|
|||
|
/** Event :\n
|
|||
|
signature : void method(MyGUI::Widget* _widget)\n
|
|||
|
@param _widget
|
|||
|
*/
|
|||
|
delegates::CMultiDelegate1<Widget*>
|
|||
|
eventChangeMouseFocus;
|
|||
|
|
|||
|
/** Event :\n
|
|||
|
signature : void method(MyGUI::Widget* _widget)\n
|
|||
|
@param _widget
|
|||
|
*/
|
|||
|
delegates::CMultiDelegate1<Widget*>
|
|||
|
eventChangeKeyFocus;
|
|||
|
|
|||
|
private:
|
|||
|
// удаляем данный виджет из всех возможных мест
|
|||
|
void _unlinkWidget(Widget* _widget);
|
|||
|
|
|||
|
void frameEntered(float _frame);
|
|||
|
|
|||
|
void firstEncoding(KeyCode _key, bool bIsKeyPressed);
|
|||
|
|
|||
|
// запоминает клавишу для поддержки повторения
|
|||
|
void storeKey(KeyCode _key, Char _text);
|
|||
|
|
|||
|
// сбрасывает клавишу повторения
|
|||
|
void resetKey();
|
|||
|
|
|||
|
private:
|
|||
|
// виджеты которым принадлежит фокус
|
|||
|
Widget* mWidgetMouseFocus;
|
|||
|
Widget* mWidgetKeyFocus;
|
|||
|
ILayer* mLayerMouseFocus;
|
|||
|
// захватил ли мышь активный виджет
|
|||
|
bool mIsWidgetMouseCapture;
|
|||
|
// таймер для двойного клика
|
|||
|
Timer mTimer; //used for double click timing
|
|||
|
|
|||
|
// нажат ли шифт
|
|||
|
bool mIsShiftPressed;
|
|||
|
// нажат ли контрол
|
|||
|
bool mIsControlPressed;
|
|||
|
// там где была последний раз нажата левая кнопка
|
|||
|
IntPoint mLastLeftPressed;
|
|||
|
IntPoint mMousePosition;
|
|||
|
// клавиша для повтора
|
|||
|
KeyCode mHoldKey;
|
|||
|
Char mHoldChar;
|
|||
|
bool mFirstPressKey;
|
|||
|
float mTimerKey;
|
|||
|
int mOldAbsZ;
|
|||
|
|
|||
|
// список виджетов с модальным режимом
|
|||
|
VectorWidgetPtr mVectorModalRootWidget;
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
} // namespace MyGUI
|
|||
|
|
|||
|
#endif // __MYGUI_INPUT_MANAGER_H__
|