From 03d11f6947e75d61f9cfe491a3898c75438beaef Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Tue, 18 Aug 2009 15:55:32 +1000 Subject: Provide a way to match RunScriptActions with RunScripts. --- src/declarative/util/qmlanimation.cpp | 48 +++++++++++++++++++++++++++++++---- src/declarative/util/qmlanimation.h | 7 +++++ src/declarative/util/qmlanimation_p.h | 2 ++ 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp index 9db5afd..86eaa78 100644 --- a/src/declarative/util/qmlanimation.cpp +++ b/src/declarative/util/qmlanimation.cpp @@ -55,6 +55,7 @@ #include #include #include +#include #include #include @@ -782,9 +783,6 @@ QML_DEFINE_TYPE(Qt,4,6,(QT_VERSION&0x00ff00)>>8,ColorAnimation,QmlColorAnimation /*! \internal \class QmlRunScriptAction - \brief The QmlRunScriptAction class allows scripts to be run during transitions - - \sa xmlRunScriptAction */ QmlRunScriptAction::QmlRunScriptAction(QObject *parent) :QmlAbstractAnimation(*(new QmlRunScriptActionPrivate), parent) @@ -805,7 +803,7 @@ void QmlRunScriptActionPrivate::init() } /*! - \qmlproperty QString RunScript::script + \qmlproperty QString RunScriptAction::script This property holds the script to run. */ QString QmlRunScriptAction::script() const @@ -823,10 +821,29 @@ void QmlRunScriptAction::setScript(const QString &script) emit scriptChanged(script); } +/*! + \qmlproperty QString RunScriptAction::runScriptName + This property holds the the name of the RunScript to run. + + This property is only valid when RunScriptAction is used as part of a transition. + If both script and runScriptName are set, runScriptName will be used. +*/ +QString QmlRunScriptAction::runScriptName() const +{ + Q_D(const QmlRunScriptAction); + return d->script; +} + +void QmlRunScriptAction::setRunScriptName(const QString &name) +{ + Q_D(QmlRunScriptAction); + d->name = name; +} + void QmlRunScriptActionPrivate::execute() { Q_Q(QmlRunScriptAction); - QString scriptStr = script; + QString scriptStr = runScriptScript.isEmpty() ? script : runScriptScript; if (!scriptStr.isEmpty()) { QmlExpression expr(qmlContext(q), scriptStr, q); @@ -835,6 +852,27 @@ void QmlRunScriptActionPrivate::execute() } } +void QmlRunScriptAction::transition(QmlStateActions &actions, + QmlMetaProperties &modified, + TransitionDirection direction) +{ + Q_D(QmlRunScriptAction); + Q_UNUSED(modified); + Q_UNUSED(direction); + + d->runScriptScript.clear(); + for (int ii = 0; ii < actions.count(); ++ii) { + Action &action = actions[ii]; + + if (action.event && action.event->typeName() == QLatin1String("RunScript") + && static_cast(action.event)->name() == d->name) { + d->runScriptScript = static_cast(action.event)->script(); + action.actionDone = true; + break; //assumes names are unique + } + } +} + QAbstractAnimation *QmlRunScriptAction::qtAnimation() { Q_D(QmlRunScriptAction); diff --git a/src/declarative/util/qmlanimation.h b/src/declarative/util/qmlanimation.h index 930ba73..93febb2 100644 --- a/src/declarative/util/qmlanimation.h +++ b/src/declarative/util/qmlanimation.h @@ -163,6 +163,7 @@ class QmlRunScriptAction : public QmlAbstractAnimation Q_DECLARE_PRIVATE(QmlRunScriptAction) Q_PROPERTY(QString script READ script WRITE setScript NOTIFY scriptChanged) + Q_PROPERTY(QString runScriptName READ runScriptName WRITE setRunScriptName) public: QmlRunScriptAction(QObject *parent=0); @@ -171,10 +172,16 @@ public: QString script() const; void setScript(const QString &); + QString runScriptName() const; + void setRunScriptName(const QString &); + Q_SIGNALS: void scriptChanged(const QString &); protected: + virtual void transition(QmlStateActions &actions, + QmlMetaProperties &modified, + TransitionDirection direction); virtual QAbstractAnimation *qtAnimation(); }; diff --git a/src/declarative/util/qmlanimation_p.h b/src/declarative/util/qmlanimation_p.h index d070d82..34ed520 100644 --- a/src/declarative/util/qmlanimation_p.h +++ b/src/declarative/util/qmlanimation_p.h @@ -230,6 +230,8 @@ public: void init(); QString script; + QString name; + QString runScriptScript; void execute(); -- cgit v0.12