From d00d84defb7ce719930a684b6da0282aa570a965 Mon Sep 17 00:00:00 2001 From: Utkarsh Ayachit Date: Wed, 7 Mar 2012 18:10:10 -0500 Subject: [PATCH] Add pqTimer to make it easier to register timers with pqEventDispatcher. --- CMakeLists.txt | 19 +++++++------ pqEventDispatcher.h | 3 ++ pqTimer.cxx | 67 +++++++++++++++++++++++++++++++++++++++++++++ pqTimer.h | 63 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+), 8 deletions(-) create mode 100644 pqTimer.cxx create mode 100644 pqTimer.h diff --git a/CMakeLists.txt b/CMakeLists.txt index bdb08f1..2d7fe93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,16 +96,17 @@ QT4_WRAP_CPP(MOC_BUILT_SOURCES pqEventTranslator.h pqLineEditEventTranslator.h pqMenuEventTranslator.h - pqNativeFileDialogEventTranslator.h pqNativeFileDialogEventPlayer.h + pqNativeFileDialogEventTranslator.h pqRecordEventsDialog.h pqSpinBoxEventTranslator.h pqStdoutEventObserver.h + pqTabBarEventTranslator.h pqTestUtility.h pqThreadedEventSource.h - pqTabBarEventTranslator.h - pqTreeViewEventTranslator.h + pqTimer.h pqTreeViewEventPlayer.h + pqTreeViewEventTranslator.h pqWidgetEventTranslator.h ${PYTHON_MOCS} ) @@ -138,9 +139,9 @@ SET(QtTesting_SOURCES pqEventPlayer.cxx pqEventTranslator.cxx pqLineEditEventTranslator.cxx + pqMenuEventTranslator.cxx pqNativeFileDialogEventPlayer.cxx pqNativeFileDialogEventTranslator.cxx - pqMenuEventTranslator.cxx pqObjectNaming.cxx pqRecordEventsDialog.cxx pqSpinBoxEventTranslator.cxx @@ -149,8 +150,9 @@ SET(QtTesting_SOURCES pqTabBarEventTranslator.cxx pqTestUtility.cxx pqThreadedEventSource.cxx - pqTreeViewEventTranslator.cxx + pqTimer.cxx pqTreeViewEventPlayer.cxx + pqTreeViewEventTranslator.cxx pqWidgetEventPlayer.cxx ) @@ -174,12 +176,12 @@ SET(QtTesting_DEVEL_HEADERS pqEventDispatcher.h pqEventObserver.h pqEventPlayer.h - pqEventTranslator.h pqEventSource.h + pqEventTranslator.h pqLineEditEventTranslator.h + pqMenuEventTranslator.h pqNativeFileDialogEventPlayer.h pqNativeFileDialogEventTranslator.h - pqMenuEventTranslator.h pqObjectNaming.h pqRecordEventsDialog.h pqSpinBoxEventTranslator.h @@ -188,8 +190,9 @@ SET(QtTesting_DEVEL_HEADERS pqTabBarEventTranslator.h pqTestUtility.h pqThreadedEventSource.h - pqTreeViewEventTranslator.h + pqTimer.h pqTreeViewEventPlayer.h + pqTreeViewEventTranslator.h pqWidgetEventPlayer.h pqWidgetEventTranslator.h QtTestingExport.h diff --git a/pqEventDispatcher.h b/pqEventDispatcher.h index 9e2ace0..9ed625c 100644 --- a/pqEventDispatcher.h +++ b/pqEventDispatcher.h @@ -63,6 +63,9 @@ class pqEventSource; /// To enable the second mode simply set the eventPlaybackDelay to 0. /// In either mode, all timers registered using registerTimer() will be /// timed-out before dispatching next event. +/// +/// To make it easier to register timers, one can directly use pqTimer instead +/// of QTimer. class QTTESTING_EXPORT pqEventDispatcher : public QObject { Q_OBJECT diff --git a/pqTimer.cxx b/pqTimer.cxx new file mode 100644 index 0000000..f6be081 --- /dev/null +++ b/pqTimer.cxx @@ -0,0 +1,67 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005,2006 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +========================================================================*/ +#include "pqTimer.h" + +#include "pqEventDispatcher.h" + +//----------------------------------------------------------------------------- +pqTimer::pqTimer(QObject* parentObject) + : Superclass(parentObject) +{ + pqEventDispatcher::registerTimer(this); +} + +//----------------------------------------------------------------------------- +pqTimer::~pqTimer() +{ +} + +//----------------------------------------------------------------------------- +void pqTimer::timerEvent(QTimerEvent* evt) +{ + // here we can consume the timer event and reschedule it for another time if + // timers are blocked. + this->Superclass::timerEvent(evt); +} + +//----------------------------------------------------------------------------- +void pqTimer::singleShot(int msec, QObject* receiver, const char* member) +{ + if (receiver && member) + { + pqTimer* timer = new pqTimer(receiver); + QObject::connect(timer, SIGNAL(timeout()), receiver, member); + QObject::connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater())); + timer->setSingleShot(true); + timer->start(msec); + } +} diff --git a/pqTimer.h b/pqTimer.h new file mode 100644 index 0000000..03f4552 --- /dev/null +++ b/pqTimer.h @@ -0,0 +1,63 @@ +/*========================================================================= + + Program: ParaView + Module: $RCSfile$ + + Copyright (c) 2005,2006 Sandia Corporation, Kitware Inc. + All rights reserved. + + ParaView is a free software; you can redistribute it and/or modify it + under the terms of the ParaView license version 1.2. + + See License_v1.2.txt for the full ParaView license. + A copy of this license can be obtained by contacting + Kitware Inc. + 28 Corporate Drive + Clifton Park, NY 12065 + USA + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +========================================================================*/ +#ifndef __pqTimer_h +#define __pqTimer_h + +#include +#include "QtTestingExport.h" + +/// pqTimer is a extension for QTimer which ensures that the timer is registered +/// with the pqEventDispatcher. Register timers with pqEventDispatcher ensures +/// that when tests are being played back, the timer will be ensured to have +/// timed out if active after every step in the playback. This provides a means +/// to reproduce the timer behaviour in the real world, during test playback. +class QTTESTING_EXPORT pqTimer : public QTimer +{ + Q_OBJECT + typedef QTimer Superclass; +public: + pqTimer(QObject* parent=0); + virtual ~pqTimer(); + + /// This static function calls a slot after a given time interval. + static void singleShot(int msec, QObject* receiver, const char* member); + +protected: + /// overridden to support blocking timer events in future (current + /// implementation merely forwards to superclass). + virtual void timerEvent(QTimerEvent* evt); + +private: + Q_DISABLE_COPY(pqTimer) +}; + +#endif -- GitLab