File indexing completed on 2025-02-21 10:12:23
0001
0002
0003
0004 #ifndef QTESTEVENT_H
0005 #define QTESTEVENT_H
0006
0007 #if 0
0008
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
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 * ) 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
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