/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef Q_NATIVE_INPUT #define Q_NATIVE_INPUT #include QT_BEGIN_NAMESPACE namespace Qt { namespace Native { enum Status {Success, Failure}; }} QT_END_NAMESPACE // ---------------------------------------------------------------------------- // Declare a set of native events that can be used to communicate with // client applications in an platform independent way // ---------------------------------------------------------------------------- class QNativeEvent { public: static const int eventId = 1; QNativeEvent(Qt::KeyboardModifiers modifiers = Qt::NoModifier); virtual ~QNativeEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const = 0; Qt::KeyboardModifiers modifiers; // Yields for mouse events too. }; class QNativeMouseEvent : public QNativeEvent { public: static const int eventId = 2; QNativeMouseEvent(){}; QNativeMouseEvent(QPoint globalPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier); virtual ~QNativeMouseEvent(){}; virtual int id() const { return eventId; }; QPoint globalPos; }; class QNativeMouseMoveEvent : public QNativeMouseEvent { public: static const int eventId = 4; QNativeMouseMoveEvent(){}; QNativeMouseMoveEvent(QPoint globalPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier); virtual ~QNativeMouseMoveEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const; }; class QNativeMouseButtonEvent : public QNativeMouseEvent { public: static const int eventId = 8; QNativeMouseButtonEvent(){}; QNativeMouseButtonEvent(QPoint globalPos, Qt::MouseButton button, int clickCount, Qt::KeyboardModifiers modifiers = Qt::NoModifier); virtual ~QNativeMouseButtonEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const; Qt::MouseButton button; int clickCount; }; class QNativeMouseDragEvent : public QNativeMouseButtonEvent { public: static const int eventId = 16; QNativeMouseDragEvent(){}; QNativeMouseDragEvent(QPoint globalPos, Qt::MouseButton button, Qt::KeyboardModifiers modifiers = Qt::NoModifier); virtual ~QNativeMouseDragEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const; }; class QNativeMouseWheelEvent : public QNativeMouseEvent { public: static const int eventId = 32; QNativeMouseWheelEvent(){}; QNativeMouseWheelEvent(QPoint globalPos, int delta, Qt::KeyboardModifiers modifiers = Qt::NoModifier); virtual ~QNativeMouseWheelEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const; int delta; }; class QNativeKeyEvent : public QNativeEvent { public: static const int eventId = 64; QNativeKeyEvent(){}; QNativeKeyEvent(int nativeKeyCode, bool press, Qt::KeyboardModifiers modifiers = Qt::NoModifier); QNativeKeyEvent(int nativeKeyCode, bool press, QChar character, Qt::KeyboardModifiers modifiers); virtual ~QNativeKeyEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const; int nativeKeyCode; bool press; QChar character; // Some Qt to Native mappings: static int Key_A; static int Key_B; static int Key_C; static int Key_1; static int Key_Backspace; static int Key_Enter; static int Key_Del; }; class QNativeModifierEvent : public QNativeEvent { public: static const int eventId = 128; QNativeModifierEvent(Qt::KeyboardModifiers modifiers = Qt::NoModifier, int nativeKeyCode = 0); virtual ~QNativeModifierEvent(){}; virtual int id() const { return eventId; }; virtual QString toString() const; int nativeKeyCode; }; // ---------------------------------------------------------------------------- // Declare a set of related output / input functions for convenience: // ---------------------------------------------------------------------------- QDebug operator<<(QDebug d, QNativeEvent *e); QDebug operator<<(QDebug d, const QNativeEvent &e); QTextStream &operator<<(QTextStream &s, QNativeEvent *e); QTextStream &operator<<(QTextStream &s, QNativeMouseEvent *e); QTextStream &operator<<(QTextStream &s, QNativeMouseMoveEvent *e); QTextStream &operator<<(QTextStream &s, QNativeMouseButtonEvent *e); QTextStream &operator<<(QTextStream &s, QNativeMouseDragEvent *e); QTextStream &operator<<(QTextStream &s, QNativeMouseWheelEvent *e); QTextStream &operator<<(QTextStream &s, QNativeKeyEvent *e); QTextStream &operator<<(QTextStream &s, QNativeModifierEvent *e); QTextStream &operator>>(QTextStream &s, QNativeMouseMoveEvent *e); QTextStream &operator>>(QTextStream &s, QNativeMouseButtonEvent *e); QTextStream &operator>>(QTextStream &s, QNativeMouseDragEvent *e); QTextStream &operator>>(QTextStream &s, QNativeMouseWheelEvent *e); QTextStream &operator>>(QTextStream &s, QNativeKeyEvent *e); QTextStream &operator>>(QTextStream &s, QNativeModifierEvent *e); // ---------------------------------------------------------------------------- // Declare the main class that is supposed to be sub-classed by components // that are to receive native events // ---------------------------------------------------------------------------- class QNativeInput { public: QNativeInput(bool subscribe = true); virtual ~QNativeInput(); // Callback methods. Should be implemented by interested sub-classes: void notify(QNativeEvent *event); virtual void nativeEvent(QNativeEvent *event); virtual void nativeMousePressEvent(QNativeMouseButtonEvent *){}; virtual void nativeMouseReleaseEvent(QNativeMouseButtonEvent *){}; virtual void nativeMouseMoveEvent(QNativeMouseMoveEvent *){}; virtual void nativeMouseDragEvent(QNativeMouseDragEvent *){}; virtual void nativeMouseWheelEvent(QNativeMouseWheelEvent *){}; virtual void nativeKeyPressEvent(QNativeKeyEvent *){}; virtual void nativeKeyReleaseEvent(QNativeKeyEvent *){}; virtual void nativeModifierEvent(QNativeModifierEvent *){}; // The following methods will differ in implementation from OS to OS: static Qt::Native::Status sendNativeMouseButtonEvent(const QNativeMouseButtonEvent &event); static Qt::Native::Status sendNativeMouseMoveEvent(const QNativeMouseMoveEvent &event); static Qt::Native::Status sendNativeMouseDragEvent(const QNativeMouseDragEvent &event); static Qt::Native::Status sendNativeMouseWheelEvent(const QNativeMouseWheelEvent &event); static Qt::Native::Status sendNativeKeyEvent(const QNativeKeyEvent &event); static Qt::Native::Status sendNativeModifierEvent(const QNativeModifierEvent &event); // sendNativeEvent will NOT differ from OS to OS. static Qt::Native::Status sendNativeEvent(const QNativeEvent &event); // The following methods will differ in implementation from OS to OS: Qt::Native::Status subscribeForNativeEvents(); Qt::Native::Status unsubscribeForNativeEvents(); }; #endif // Q_NATIVE_INPUT