Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:27:33

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 QT_WARNING_PUSH
0032 QT_WARNING_DISABLE_CLANG("-Wweak-vtables") // QTBUG-1044486
0033 
0034 class QTestEvent
0035 {
0036 public:
0037 #ifdef QT_WIDGETS_LIB
0038     virtual void simulate(QWidget *w) = 0;
0039 #endif
0040     virtual QTestEvent *clone() const = 0;
0041 
0042     virtual ~QTestEvent() = default; // ### FIXME: weak vtable (QTBUG-104486)
0043 };
0044 
0045 #ifdef QT_GUI_LIB
0046 class QTestKeyEvent: public QTestEvent
0047 {
0048 public:
0049     ~QTestKeyEvent() override = default; // ### FIXME: weak vtable (QTBUG-104486)
0050 
0051     inline QTestKeyEvent(QTest::KeyAction action, Qt::Key key, Qt::KeyboardModifiers modifiers, int delay)
0052         : _action(action), _delay(delay), _modifiers(modifiers), _ascii(0), _key(key) {}
0053     inline QTestKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers, int delay)
0054         : _action(action), _delay(delay), _modifiers(modifiers),
0055           _ascii(ascii), _key(Qt::Key_unknown) {}
0056     inline QTestEvent *clone() const override { return new QTestKeyEvent(*this); }
0057 
0058 #ifdef QT_WIDGETS_LIB
0059     inline void simulate(QWidget *w) override
0060     {
0061         if (_ascii == 0)
0062             QTest::keyEvent(_action, w, _key, _modifiers, _delay);
0063         else
0064             QTest::keyEvent(_action, w, _ascii, _modifiers, _delay);
0065     }
0066 #endif
0067 
0068 protected:
0069     QTest::KeyAction _action;
0070     int _delay;
0071     Qt::KeyboardModifiers _modifiers;
0072     char _ascii;
0073     Qt::Key _key;
0074 };
0075 
0076 class QTestKeyClicksEvent: public QTestEvent
0077 {
0078 public:
0079     ~QTestKeyClicksEvent() override = default; // ### FIXME: weak vtables (QTBUG-104486)
0080 
0081     inline QTestKeyClicksEvent(const QString &keys, Qt::KeyboardModifiers modifiers, int delay)
0082         : _keys(keys), _modifiers(modifiers), _delay(delay) {}
0083     inline QTestEvent *clone() const override { return new QTestKeyClicksEvent(*this); }
0084 
0085 #ifdef QT_WIDGETS_LIB
0086     inline void simulate(QWidget *w) override
0087     {
0088         QTest::keyClicks(w, _keys, _modifiers, _delay);
0089     }
0090 #endif
0091 
0092 private:
0093     QT_ONLY_WIDGETLIB_USES QString _keys;
0094     QT_ONLY_WIDGETLIB_USES Qt::KeyboardModifiers _modifiers;
0095     QT_ONLY_WIDGETLIB_USES int _delay;
0096 };
0097 
0098 class QTestMouseEvent: public QTestEvent
0099 {
0100 public:
0101     ~QTestMouseEvent() override = default; // ### FIXME: weak vtables (QTBUG-104486)
0102 
0103     inline QTestMouseEvent(QTest::MouseAction action, Qt::MouseButton button,
0104             Qt::KeyboardModifiers modifiers, QPoint position, int delay)
0105         : _action(action), _button(button), _modifiers(modifiers), _pos(position), _delay(delay) {}
0106     inline QTestEvent *clone() const override { return new QTestMouseEvent(*this); }
0107 
0108 #ifdef QT_WIDGETS_LIB
0109     inline void simulate(QWidget *w) override
0110     {
0111         QTest::mouseEvent(_action, w, _button, _modifiers, _pos, _delay);
0112     }
0113 #endif
0114 
0115 private:
0116     QT_ONLY_WIDGETLIB_USES QTest::MouseAction _action;
0117     QT_ONLY_WIDGETLIB_USES Qt::MouseButton _button;
0118     QT_ONLY_WIDGETLIB_USES Qt::KeyboardModifiers _modifiers;
0119     QT_ONLY_WIDGETLIB_USES QPoint _pos;
0120     QT_ONLY_WIDGETLIB_USES int _delay;
0121 };
0122 #endif //QT_GUI_LIB
0123 
0124 
0125 class QTestDelayEvent: public QTestEvent
0126 {
0127 public:
0128     inline QTestDelayEvent(int msecs): _delay(msecs) {}
0129     ~QTestDelayEvent() override = default; // ### FIXME: weak vtables (QTBUG-104486)
0130 
0131     inline QTestEvent *clone() const override { return new QTestDelayEvent(*this); }
0132 
0133 #ifdef QT_WIDGETS_LIB
0134     inline void simulate(QWidget * /*w*/) override { QTest::qWait(_delay); }
0135 #endif
0136 
0137 private:
0138     QT_ONLY_WIDGETLIB_USES int _delay;
0139 };
0140 
0141 class QTestEventList: public QList<QTestEvent *>
0142 {
0143 public:
0144     inline QTestEventList() {}
0145     inline QTestEventList(const QTestEventList &other): QList<QTestEvent *>()
0146     { for (int i = 0; i < other.size(); ++i) append(other.at(i)->clone()); }
0147     inline ~QTestEventList()
0148     { clear(); }
0149     inline void clear()
0150     { qDeleteAll(*this); QList<QTestEvent *>::clear(); }
0151 
0152 #ifdef QT_GUI_LIB
0153     inline void addKeyClick(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0154     { addKeyEvent(QTest::Click, qtKey, modifiers, msecs); }
0155     inline void addKeyPress(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0156     { addKeyEvent(QTest::Press, qtKey, modifiers, msecs); }
0157     inline void addKeyRelease(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0158     { addKeyEvent(QTest::Release, qtKey, modifiers, msecs); }
0159     inline void addKeyEvent(QTest::KeyAction action, Qt::Key qtKey,
0160                             Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0161     { append(new QTestKeyEvent(action, qtKey, modifiers, msecs)); }
0162 
0163     inline void addKeyClick(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0164     { addKeyEvent(QTest::Click, ascii, modifiers, msecs); }
0165     inline void addKeyPress(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0166     { addKeyEvent(QTest::Press, ascii, modifiers, msecs); }
0167     inline void addKeyRelease(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0168     { addKeyEvent(QTest::Release, ascii, modifiers, msecs); }
0169     inline void addKeyClicks(const QString &keys, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0170     { append(new QTestKeyClicksEvent(keys, modifiers, msecs)); }
0171     inline void addKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0172     { append(new QTestKeyEvent(action, ascii, modifiers, msecs)); }
0173 
0174     inline void addMousePress(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0175                               QPoint pos = QPoint(), int delay=-1)
0176     { append(new QTestMouseEvent(QTest::MousePress, button, stateKey, pos, delay)); }
0177     inline void addMouseRelease(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0178                                 QPoint pos = QPoint(), int delay=-1)
0179     { append(new QTestMouseEvent(QTest::MouseRelease, button, stateKey, pos, delay)); }
0180     inline void addMouseClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0181                               QPoint pos = QPoint(), int delay=-1)
0182     { append(new QTestMouseEvent(QTest::MouseClick, button, stateKey, pos, delay)); }
0183     inline void addMouseDClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0184                             QPoint pos = QPoint(), int delay=-1)
0185     { append(new QTestMouseEvent(QTest::MouseDClick, button, stateKey, pos, delay)); }
0186     inline void addMouseMove(QPoint pos = QPoint(), int delay=-1)
0187     { append(new QTestMouseEvent(QTest::MouseMove, Qt::NoButton, Qt::KeyboardModifiers(), pos, delay)); }
0188 #endif //QT_GUI_LIB
0189 
0190     inline void addDelay(int msecs)
0191     { append(new QTestDelayEvent(msecs)); }
0192 
0193 #ifdef QT_WIDGETS_LIB
0194     inline void simulate(QWidget *w)
0195     {
0196         for (int i = 0; i < size(); ++i)
0197             at(i)->simulate(w);
0198     }
0199 #endif
0200 };
0201 
0202 #undef QT_ONLY_WIDGETLIB_USES
0203 
0204 QT_WARNING_POP // Clang -Wweak-vtables
0205 
0206 QT_END_NAMESPACE
0207 
0208 Q_DECLARE_METATYPE(QTestEventList)
0209 
0210 #endif