26 #include "animationscriptengine_p.h"
30 #include <QParallelAnimationGroup>
31 #include <QPauseAnimation>
32 #include <QSequentialAnimationGroup>
33 #include <QTextStream>
39 #include "javascriptanimation_p.h"
40 #include "bindings/animationgroup_p.h"
47 namespace AnimationScriptEngine
85 if (context->argumentCount() > 1) {
86 const QString name =
s_prefix + context->argument(0).toString();
89 const QScriptValue func = context->argument(1);
90 if (func.isFunction()) {
96 return engine->undefinedValue();
102 return context->thisObject().property(
"__plasma_javascriptanimation").toQObject();
109 return engine->undefinedValue();
112 QSequentialAnimationGroup *group =
new SequentialAnimationGroup(parent);
113 return engine->newQObject(group);
120 return engine->undefinedValue();
123 ParallelAnimationGroup *group =
new ParallelAnimationGroup(parent);
124 return engine->newQObject(group);
130 QScriptEngine *engine = scriptValue.engine();
131 for (
int i = 0; i < meta.enumeratorCount(); ++i) {
132 QMetaEnum e = meta.enumerator(i);
134 for (
int i=0; i < e.keyCount(); ++i) {
136 scriptValue.setProperty(e.key(i), QScriptValue(engine, e.value(i)));
141 QScriptValue
animation(QScriptContext *context, QScriptEngine *engine)
143 if (context->argumentCount() != 1) {
144 return context->throwError(i18n(
"animation() takes one argument"));
149 if (context->argument(0).isString()) {
150 const QString animName = context->argument(0).toString();
153 int animId = context->argument(0).toInt32();
154 if (animId == JavascriptAnimation::PauseAnimation) {
155 anim =
new QPauseAnimation(parent);
156 }
else if (animId == JavascriptAnimation::PropertyAnimation) {
157 anim =
new QPropertyAnimation(parent);
164 QScriptValue value = engine->newQObject(anim);
169 return context->throwError(i18n(
"%1 is not a known animation type", context->argument(0).isString()));
175 inst =
new QScriptEngine;
176 QScriptValue global =
inst->globalObject();
181 kDebug() <<
"........... first js animation, creating the engine!";
190 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
191 kError() <<
"failed to open script file" << path;
195 QTextStream buffer(&file);
196 QString tmp(buffer.readAll());
199 engine->pushContext();
201 QScriptValue def(engine->evaluate(tmp, path));
203 engine->popContext();
204 if (engine->hasUncaughtException()) {
205 const QScriptValue error = engine->uncaughtException();
206 QString file = error.property(
"fileName").toString();
207 const QString failureMsg = QString(
"Error in %1 on line %2.\n%3")
209 .arg(error.property(
"lineNumber").toString())
210 .arg(error.toString());
211 kError() << failureMsg;