/**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef Q_NATIVE_INPUT #define Q_NATIVE_INPUT #include namespace Qt { namespace Native { enum Status {Success, Failure}; }} // ---------------------------------------------------------------------------- // 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, int pid = 0); static Qt::Native::Status sendNativeModifierEvent(const QNativeModifierEvent &event); // sendNativeEvent will NOT differ from OS to OS. static Qt::Native::Status sendNativeEvent(const QNativeEvent &event, int pid = 0); // The following methods will differ in implementation from OS to OS: Qt::Native::Status subscribeForNativeEvents(); Qt::Native::Status unsubscribeForNativeEvents(); }; #endif // Q_NATIVE_INPUT