access to other animations
svn path=/trunk/KDE/kdelibs/; revision=1120776
This commit is contained in:
parent
a06b2bf70d
commit
6c44a1e8a4
@ -26,12 +26,17 @@
|
||||
#include "animationscriptengine_p.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QMetaEnum>
|
||||
#include <QParallelAnimationGroup>
|
||||
#include <QPauseAnimation>
|
||||
#include <QSequentialAnimationGroup>
|
||||
#include <QTextStream>
|
||||
|
||||
#include <kdebug.h>
|
||||
#include <klocale.h>
|
||||
|
||||
#include "animator.h"
|
||||
#include "javascriptanimation_p.h"
|
||||
#include "bindings/animationgroup_p.h"
|
||||
|
||||
namespace Plasma
|
||||
@ -104,6 +109,51 @@ QScriptValue parallelAnimationGroup(QScriptContext *context, QScriptEngine *engi
|
||||
return engine->newQObject(group);
|
||||
}
|
||||
|
||||
void registerEnums(QScriptValue &scriptValue, const QMetaObject &meta)
|
||||
{
|
||||
//manually create enum values. ugh
|
||||
QScriptEngine *engine = scriptValue.engine();
|
||||
for (int i = 0; i < meta.enumeratorCount(); ++i) {
|
||||
QMetaEnum e = meta.enumerator(i);
|
||||
//kDebug() << e.name();
|
||||
for (int i=0; i < e.keyCount(); ++i) {
|
||||
//kDebug() << e.key(i) << e.value(i);
|
||||
scriptValue.setProperty(e.key(i), QScriptValue(engine, e.value(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QScriptValue animation(QScriptContext *context, QScriptEngine *engine)
|
||||
{
|
||||
if (context->argumentCount() != 1) {
|
||||
return context->throwError(i18n("animation() takes one argument"));
|
||||
}
|
||||
|
||||
QObject *parent = extractParent(context, engine);
|
||||
QAbstractAnimation *anim = 0;
|
||||
if (context->argument(0).isString()) {
|
||||
const QString animName = context->argument(0).toString();
|
||||
anim = Plasma::Animator::create(animName, parent);
|
||||
} else {
|
||||
int animId = context->argument(0).toInt32();
|
||||
if (animId == JavascriptAnimation::PauseAnimation) {
|
||||
anim = new QPauseAnimation(parent);
|
||||
} else if (animId == JavascriptAnimation::PropertyAnimation) {
|
||||
anim = new QPropertyAnimation(parent);
|
||||
} else {
|
||||
anim = Plasma::Animator::create(static_cast<Animator::Animation>(animId), parent);
|
||||
}
|
||||
}
|
||||
|
||||
if (anim) {
|
||||
QScriptValue value = engine->newQObject(anim);
|
||||
registerEnums(value, *anim->metaObject());
|
||||
return value;
|
||||
}
|
||||
|
||||
return context->throwError(i18n("%1 is not a known animation type", context->argument(0).isString()));
|
||||
}
|
||||
|
||||
QScriptEngine *globalEngine()
|
||||
{
|
||||
if (!inst) {
|
||||
|
@ -27,6 +27,8 @@
|
||||
* - support more properties: angle, direction, etc
|
||||
* - support calling a 'resetAnimation' in js class when animation is stopped
|
||||
*/
|
||||
#define ADD_ENUM_VALUE(__c__, __ns__, __v__) \
|
||||
__c__.setProperty(#__v__, QScriptValue(__c__.engine(), __ns__::__v__))
|
||||
|
||||
namespace Plasma
|
||||
{
|
||||
@ -58,6 +60,21 @@ void JavascriptAnimation::updateState(QAbstractAnimation::State newState, QAbstr
|
||||
kDebug() << "trying for" << m_name << m_instance.isFunction();
|
||||
m_instance.setProperty("__plasma_javascriptanimation", engine->newQObject(this),
|
||||
QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, FadeAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, AppearAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, DisappearAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, ActivateAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, FadeAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, GrowAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, PulseAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, RotationAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, RotationStackedAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, SlideAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, GeometryAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, ZoomAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, Plasma::Animator, PixmapTransitionAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, JavascriptAnimation, PauseAnimation);
|
||||
ADD_ENUM_VALUE(m_instance, JavascriptAnimation, PropertyAnimation);
|
||||
|
||||
//Get the method of the object
|
||||
m_method = m_instance.property(QString("updateCurrentTime"));
|
||||
|
@ -22,8 +22,9 @@
|
||||
|
||||
#include <QScriptValue>
|
||||
|
||||
#include <plasma/animations/animation.h>
|
||||
#include <plasma/plasma_export.h>
|
||||
#include "animation.h"
|
||||
#include "plasma_export.h"
|
||||
#include "animator.h"
|
||||
|
||||
class QString;
|
||||
class QScriptEngine;
|
||||
@ -38,6 +39,9 @@ class JavascriptAnimation: public Animation
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum { PauseAnimation = Animator::LastAnimation + 1,
|
||||
PropertyAnimation = Animator::LastAnimation + 2
|
||||
};
|
||||
|
||||
explicit JavascriptAnimation(const QString &name, QObject *parent = 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user