tests/auto/macnativeevents/qnativeevents.h
changeset 30 5dc02b23752f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/macnativeevents/qnativeevents.h	Tue Jul 06 15:10:48 2010 +0300
@@ -0,0 +1,228 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 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 <QtCore>
+
+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