Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:12:23

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QTESTEVENT_H
0005 #define QTESTEVENT_H
0006 
0007 #if 0
0008 // inform syncqt
0009 #pragma qt_no_master_include
0010 #endif
0011 
0012 #include <QtTest/qttestglobal.h>
0013 #ifdef QT_GUI_LIB
0014 #include <QtTest/qtestkeyboard.h>
0015 #include <QtTest/qtestmouse.h>
0016 #endif
0017 #include <QtTest/qtestsystem.h>
0018 
0019 #include <QtCore/qlist.h>
0020 
0021 #include <stdlib.h>
0022 
0023 QT_BEGIN_NAMESPACE
0024 
0025 #ifdef QT_WIDGETS_LIB
0026 # define QT_ONLY_WIDGETLIB_USES
0027 #else
0028 # define QT_ONLY_WIDGETLIB_USES Q_DECL_UNUSED_MEMBER
0029 #endif
0030 
0031 class QTestEvent
0032 {
0033 public:
0034 #ifdef QT_WIDGETS_LIB
0035     virtual void simulate(QWidget *w) = 0;
0036 #endif
0037     virtual QTestEvent *clone() const = 0;
0038 
0039     virtual ~QTestEvent() {}
0040 };
0041 
0042 #ifdef QT_GUI_LIB
0043 class QTestKeyEvent: public QTestEvent
0044 {
0045 public:
0046     inline QTestKeyEvent(QTest::KeyAction action, Qt::Key key, Qt::KeyboardModifiers modifiers, int delay)
0047         : _action(action), _delay(delay), _modifiers(modifiers), _ascii(0), _key(key) {}
0048     inline QTestKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers, int delay)
0049         : _action(action), _delay(delay), _modifiers(modifiers),
0050           _ascii(ascii), _key(Qt::Key_unknown) {}
0051     inline QTestEvent *clone() const override { return new QTestKeyEvent(*this); }
0052 
0053 #ifdef QT_WIDGETS_LIB
0054     inline void simulate(QWidget *w) override
0055     {
0056         if (_ascii == 0)
0057             QTest::keyEvent(_action, w, _key, _modifiers, _delay);
0058         else
0059             QTest::keyEvent(_action, w, _ascii, _modifiers, _delay);
0060     }
0061 #endif
0062 
0063 protected:
0064     QTest::KeyAction _action;
0065     int _delay;
0066     Qt::KeyboardModifiers _modifiers;
0067     char _ascii;
0068     Qt::Key _key;
0069 };
0070 
0071 class QTestKeyClicksEvent: public QTestEvent
0072 {
0073 public:
0074     inline QTestKeyClicksEvent(const QString &keys, Qt::KeyboardModifiers modifiers, int delay)
0075         : _keys(keys), _modifiers(modifiers), _delay(delay) {}
0076     inline QTestEvent *clone() const override { return new QTestKeyClicksEvent(*this); }
0077 
0078 #ifdef QT_WIDGETS_LIB
0079     inline void simulate(QWidget *w) override
0080     {
0081         QTest::keyClicks(w, _keys, _modifiers, _delay);
0082     }
0083 #endif
0084 
0085 private:
0086     QT_ONLY_WIDGETLIB_USES QString _keys;
0087     QT_ONLY_WIDGETLIB_USES Qt::KeyboardModifiers _modifiers;
0088     QT_ONLY_WIDGETLIB_USES int _delay;
0089 };
0090 
0091 class QTestMouseEvent: public QTestEvent
0092 {
0093 public:
0094     inline QTestMouseEvent(QTest::MouseAction action, Qt::MouseButton button,
0095             Qt::KeyboardModifiers modifiers, QPoint position, int delay)
0096         : _action(action), _button(button), _modifiers(modifiers), _pos(position), _delay(delay) {}
0097     inline QTestEvent *clone() const override { return new QTestMouseEvent(*this); }
0098 
0099 #ifdef QT_WIDGETS_LIB
0100     inline void simulate(QWidget *w) override
0101     {
0102         QTest::mouseEvent(_action, w, _button, _modifiers, _pos, _delay);
0103     }
0104 #endif
0105 
0106 private:
0107     QT_ONLY_WIDGETLIB_USES QTest::MouseAction _action;
0108     QT_ONLY_WIDGETLIB_USES Qt::MouseButton _button;
0109     QT_ONLY_WIDGETLIB_USES Qt::KeyboardModifiers _modifiers;
0110     QT_ONLY_WIDGETLIB_USES QPoint _pos;
0111     QT_ONLY_WIDGETLIB_USES int _delay;
0112 };
0113 #endif //QT_GUI_LIB
0114 
0115 
0116 class QTestDelayEvent: public QTestEvent
0117 {
0118 public:
0119     inline QTestDelayEvent(int msecs): _delay(msecs) {}
0120     inline QTestEvent *clone() const override { return new QTestDelayEvent(*this); }
0121 
0122 #ifdef QT_WIDGETS_LIB
0123     inline void simulate(QWidget * /*w*/) override { QTest::qWait(_delay); }
0124 #endif
0125 
0126 private:
0127     QT_ONLY_WIDGETLIB_USES int _delay;
0128 };
0129 
0130 class QTestEventList: public QList<QTestEvent *>
0131 {
0132 public:
0133     inline QTestEventList() {}
0134     inline QTestEventList(const QTestEventList &other): QList<QTestEvent *>()
0135     { for (int i = 0; i < other.size(); ++i) append(other.at(i)->clone()); }
0136     inline ~QTestEventList()
0137     { clear(); }
0138     inline void clear()
0139     { qDeleteAll(*this); QList<QTestEvent *>::clear(); }
0140 
0141 #ifdef QT_GUI_LIB
0142     inline void addKeyClick(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0143     { addKeyEvent(QTest::Click, qtKey, modifiers, msecs); }
0144     inline void addKeyPress(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0145     { addKeyEvent(QTest::Press, qtKey, modifiers, msecs); }
0146     inline void addKeyRelease(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0147     { addKeyEvent(QTest::Release, qtKey, modifiers, msecs); }
0148     inline void addKeyEvent(QTest::KeyAction action, Qt::Key qtKey,
0149                             Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0150     { append(new QTestKeyEvent(action, qtKey, modifiers, msecs)); }
0151 
0152     inline void addKeyClick(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0153     { addKeyEvent(QTest::Click, ascii, modifiers, msecs); }
0154     inline void addKeyPress(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0155     { addKeyEvent(QTest::Press, ascii, modifiers, msecs); }
0156     inline void addKeyRelease(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0157     { addKeyEvent(QTest::Release, ascii, modifiers, msecs); }
0158     inline void addKeyClicks(const QString &keys, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0159     { append(new QTestKeyClicksEvent(keys, modifiers, msecs)); }
0160     inline void addKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0161     { append(new QTestKeyEvent(action, ascii, modifiers, msecs)); }
0162 
0163     inline void addMousePress(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0164                               QPoint pos = QPoint(), int delay=-1)
0165     { append(new QTestMouseEvent(QTest::MousePress, button, stateKey, pos, delay)); }
0166     inline void addMouseRelease(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0167                                 QPoint pos = QPoint(), int delay=-1)
0168     { append(new QTestMouseEvent(QTest::MouseRelease, button, stateKey, pos, delay)); }
0169     inline void addMouseClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0170                               QPoint pos = QPoint(), int delay=-1)
0171     { append(new QTestMouseEvent(QTest::MouseClick, button, stateKey, pos, delay)); }
0172     inline void addMouseDClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0173                             QPoint pos = QPoint(), int delay=-1)
0174     { append(new QTestMouseEvent(QTest::MouseDClick, button, stateKey, pos, delay)); }
0175     inline void addMouseMove(QPoint pos = QPoint(), int delay=-1)
0176     { append(new QTestMouseEvent(QTest::MouseMove, Qt::NoButton, Qt::KeyboardModifiers(), pos, delay)); }
0177 #endif //QT_GUI_LIB
0178 
0179     inline void addDelay(int msecs)
0180     { append(new QTestDelayEvent(msecs)); }
0181 
0182 #ifdef QT_WIDGETS_LIB
0183     inline void simulate(QWidget *w)
0184     {
0185         for (int i = 0; i < size(); ++i)
0186             at(i)->simulate(w);
0187     }
0188 #endif
0189 };
0190 
0191 #undef QT_ONLY_WIDGETLIB_USES
0192 
0193 QT_END_NAMESPACE
0194 
0195 Q_DECLARE_METATYPE(QTestEventList)
0196 
0197 #endif