From a9a99225b876acf0c5664d2a7d021c3f05c1b48e Mon Sep 17 00:00:00 2001
From: Christiaan Janssen <christiaan.janssen@nokia.com>
Date: Tue, 7 Sep 2010 17:23:12 +0200
Subject: [PATCH] QmlInspector:  Added pause and step animations option

Reviewed-by:  Lasse Holmstedt
---
 src/tools/qml/qmlobserver/qmlruntime.cpp | 30 ++++++++++++++++++++++--
 src/tools/qml/qmlobserver/qmlruntime.h   |  8 ++++++-
 2 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/src/tools/qml/qmlobserver/qmlruntime.cpp b/src/tools/qml/qmlobserver/qmlruntime.cpp
index 58328110b6c..6e5bdcf335c 100644
--- a/src/tools/qml/qmlobserver/qmlruntime.cpp
+++ b/src/tools/qml/qmlobserver/qmlruntime.cpp
@@ -98,6 +98,7 @@
 #include <QMutexLocker>
 #include "proxysettings.h"
 #include "deviceorientation.h"
+#include <QInputDialog>
 
 #ifdef GL_SUPPORTED
 #include <QGLWidget>
@@ -770,10 +771,16 @@ void QDeclarativeViewer::createMenu()
     speedAction->setData(10.0f);
     playSpeedMenuActions->addAction(speedAction);
 
-    pauseAnimationsAction = playSpeedMenu->addAction(tr("Pause"), this, SLOT(pauseAnimations(bool)));
+    pauseAnimationsAction = playSpeedMenu->addAction(tr("Pause"), this, SLOT(setAnimationsPaused(bool)));
     pauseAnimationsAction->setCheckable(true);
     pauseAnimationsAction->setShortcut(QKeySequence("Ctrl+."));
 
+    animationStepAction = playSpeedMenu->addAction(tr("Pause and step"), this, SLOT(stepAnimations()));
+    animationStepAction->setShortcut(QKeySequence("Ctrl+,"));
+
+    animationSetStepAction = playSpeedMenu->addAction(tr("Set step"), this, SLOT(setAnimationStep()));
+    m_stepSize = 40;
+
     QAction *playSpeedAction = new QAction(tr("Animations"), this);
     playSpeedAction->setMenu(playSpeedMenu);
 
@@ -1002,7 +1009,7 @@ void QDeclarativeViewer::toggleRecording()
     setRecording(recording);
 }
 
-void QDeclarativeViewer::pauseAnimations(bool enable)
+void QDeclarativeViewer::setAnimationsPaused(bool enable)
 {
     if (enable) {
         setAnimationSpeed(0.0);
@@ -1011,6 +1018,25 @@ void QDeclarativeViewer::pauseAnimations(bool enable)
     }
 }
 
+void QDeclarativeViewer::pauseAnimations() {
+    pauseAnimationsAction->setChecked(true);
+    setAnimationsPaused(true);
+}
+
+void QDeclarativeViewer::stepAnimations()
+{
+    setAnimationSpeed(1.0);
+    QTimer::singleShot(m_stepSize, this, SLOT(pauseAnimations()));
+}
+
+void QDeclarativeViewer::setAnimationStep()
+{
+    bool ok;
+    int stepSize = QInputDialog::getInt(this, tr("Set animation step duration"),
+                                              tr("Step duration (ms):"), m_stepSize, 20, 10000, 1, &ok);
+    if (ok) m_stepSize = stepSize;
+}
+
 void QDeclarativeViewer::changeAnimationSpeed()
 {
     QAction *action = qobject_cast<QAction*>(sender());
diff --git a/src/tools/qml/qmlobserver/qmlruntime.h b/src/tools/qml/qmlobserver/qmlruntime.h
index c4653201c79..2c6c5eefbd4 100644
--- a/src/tools/qml/qmlobserver/qmlruntime.h
+++ b/src/tools/qml/qmlobserver/qmlruntime.h
@@ -131,7 +131,10 @@ public slots:
     void proxySettingsChanged ();
     void rotateOrientation();
     void statusChanged();
-    void pauseAnimations(bool);
+    void setAnimationsPaused(bool);
+    void pauseAnimations();
+    void stepAnimations();
+    void setAnimationStep();
     void changeAnimationSpeed();
     void launch(const QString &);
 
@@ -193,7 +196,10 @@ private:
     bool convertAvailable;
 
     float animationSpeed;
+    int m_stepSize;
     QAction *pauseAnimationsAction;
+    QAction *animationStepAction;
+    QAction *animationSetStepAction;
 
     QActionGroup *orientation;
     QAction *showWarningsWindow;
-- 
GitLab