qtestevent.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:8k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtTest module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QTESTEVENT_H
  38. #define QTESTEVENT_H
  39. #if 0
  40. // inform syncqt
  41. #pragma qt_no_master_include
  42. #endif
  43. #include <QtTest/qtest_global.h>
  44. #include <QtTest/qtestkeyboard.h>
  45. #include <QtTest/qtestmouse.h>
  46. #include <QtTest/qtestsystem.h>
  47. #include <QtCore/qlist.h>
  48. #include <stdlib.h>
  49. QT_BEGIN_HEADER
  50. QT_BEGIN_NAMESPACE
  51. QT_MODULE(Test)
  52. class QTestEvent
  53. {
  54. public:
  55.     virtual void simulate(QWidget *w) = 0;
  56.     virtual QTestEvent *clone() const = 0;
  57.     virtual ~QTestEvent() {}
  58. };
  59. class QTestKeyEvent: public QTestEvent
  60. {
  61. public:
  62.     inline QTestKeyEvent(QTest::KeyAction action, Qt::Key key, Qt::KeyboardModifiers modifiers, int delay)
  63.         : _action(action), _delay(delay), _modifiers(modifiers), _ascii(0), _key(key) {}
  64.     inline QTestKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers, int delay)
  65.         : _action(action), _delay(delay), _modifiers(modifiers),
  66.           _ascii(ascii), _key(Qt::Key_unknown) {}
  67.     inline QTestEvent *clone() const { return new QTestKeyEvent(*this); }
  68.     inline void simulate(QWidget *w)
  69.     {
  70.         if (_ascii == 0)
  71.             QTest::keyEvent(_action, w, _key, _modifiers, _delay);
  72.         else
  73.             QTest::keyEvent(_action, w, _ascii, _modifiers, _delay);
  74.     }
  75. protected:
  76.     QTest::KeyAction _action;
  77.     int _delay;
  78.     Qt::KeyboardModifiers _modifiers;
  79.     char _ascii;
  80.     Qt::Key _key;
  81. };
  82. class QTestKeyClicksEvent: public QTestEvent
  83. {
  84. public:
  85.     inline QTestKeyClicksEvent(const QString &keys, Qt::KeyboardModifiers modifiers, int delay)
  86.         : _keys(keys), _modifiers(modifiers), _delay(delay) {}
  87.     inline QTestEvent *clone() const { return new QTestKeyClicksEvent(*this); }
  88.     inline void simulate(QWidget *w)
  89.     {
  90.         QTest::keyClicks(w, _keys, _modifiers, _delay);
  91.     }
  92. private:
  93.     QString _keys;
  94.     Qt::KeyboardModifiers _modifiers;
  95.     int _delay;
  96. };
  97. class QTestMouseEvent: public QTestEvent
  98. {
  99. public:
  100.     inline QTestMouseEvent(QTest::MouseAction action, Qt::MouseButton button,
  101.             Qt::KeyboardModifiers modifiers, QPoint position, int delay)
  102.         : _action(action), _button(button), _modifiers(modifiers), _pos(position), _delay(delay) {}
  103.     inline QTestEvent *clone() const { return new QTestMouseEvent(*this); }
  104.     inline void simulate(QWidget *w)
  105.     {
  106.         QTest::mouseEvent(_action, w, _button, _modifiers, _pos, _delay);
  107.     }
  108. private:
  109.     QTest::MouseAction _action;
  110.     Qt::MouseButton _button;
  111.     Qt::KeyboardModifiers _modifiers;
  112.     QPoint _pos;
  113.     int _delay;
  114. };
  115. class QTestDelayEvent: public QTestEvent
  116. {
  117. public:
  118.     inline QTestDelayEvent(int msecs): _delay(msecs) {}
  119.     inline QTestEvent *clone() const { return new QTestDelayEvent(*this); }
  120.     inline void simulate(QWidget * /*w*/) { QTest::qWait(_delay); }
  121. private:
  122.     int _delay;
  123. };
  124. class QTestEventList: public QList<QTestEvent *>
  125. {
  126. public:
  127.     inline QTestEventList() {}
  128.     inline QTestEventList(const QTestEventList &other): QList<QTestEvent *>()
  129.     { for (int i = 0; i < other.count(); ++i) append(other.at(i)->clone()); }
  130.     inline ~QTestEventList()
  131.     { clear(); }
  132.     inline void clear()
  133.     { qDeleteAll(*this); QList<QTestEvent *>::clear(); }
  134.     inline void addKeyClick(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  135.     { addKeyEvent(QTest::Click, qtKey, modifiers, msecs); }
  136.     inline void addKeyPress(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  137.     { addKeyEvent(QTest::Press, qtKey, modifiers, msecs); }
  138.     inline void addKeyRelease(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  139.     { addKeyEvent(QTest::Release, qtKey, modifiers, msecs); }
  140.     inline void addKeyEvent(QTest::KeyAction action, Qt::Key qtKey,
  141.                             Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  142.     { append(new QTestKeyEvent(action, qtKey, modifiers, msecs)); }
  143.     inline void addKeyClick(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  144.     { addKeyEvent(QTest::Click, ascii, modifiers, msecs); }
  145.     inline void addKeyPress(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  146.     { addKeyEvent(QTest::Press, ascii, modifiers, msecs); }
  147.     inline void addKeyRelease(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  148.     { addKeyEvent(QTest::Release, ascii, modifiers, msecs); }
  149.     inline void addKeyClicks(const QString &keys, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  150.     { append(new QTestKeyClicksEvent(keys, modifiers, msecs)); }
  151.     inline void addKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
  152.     { append(new QTestKeyEvent(action, ascii, modifiers, msecs)); }
  153.     inline void addMousePress(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
  154.                               QPoint pos = QPoint(), int delay=-1)
  155.     { append(new QTestMouseEvent(QTest::MousePress, button, stateKey, pos, delay)); }
  156.     inline void addMouseRelease(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
  157.                                 QPoint pos = QPoint(), int delay=-1)
  158.     { append(new QTestMouseEvent(QTest::MouseRelease, button, stateKey, pos, delay)); }
  159.     inline void addMouseClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
  160.                               QPoint pos = QPoint(), int delay=-1)
  161.     { append(new QTestMouseEvent(QTest::MouseClick, button, stateKey, pos, delay)); }
  162.     inline void addMouseDClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0,
  163.                             QPoint pos = QPoint(), int delay=-1)
  164.     { append(new QTestMouseEvent(QTest::MousePress, button, stateKey, pos, delay)); }
  165.     inline void addMouseMove(QPoint pos = QPoint(), int delay=-1)
  166.     { append(new QTestMouseEvent(QTest::MouseMove, Qt::NoButton, 0, pos, delay)); }
  167.     inline void addDelay(int msecs)
  168.     { append(new QTestDelayEvent(msecs)); }
  169.     inline void simulate(QWidget *w)
  170.     {
  171.         for (int i = 0; i < count(); ++i)
  172.             at(i)->simulate(w);
  173.     }
  174. };
  175. QT_END_NAMESPACE
  176. Q_DECLARE_METATYPE(QTestEventList)
  177. QT_END_HEADER
  178. #endif