diff --git a/src/tools/qml/qmlobserver/qmlruntime.cpp b/src/tools/qml/qmlobserver/qmlruntime.cpp index 58328110b6c64c293b4983b39062d36513cab766..6e5bdcf335cf91d0d819056af0d979c251bc8a4b 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 c4653201c798b03c4ec66368279d39aaf7115005..2c6c5eefbd4a1612a5db80f93e3e5c4cceb3bfad 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;