From f5cb7c67a79a18584f7efebb29474196c76b3b3a Mon Sep 17 00:00:00 2001 From: "Aaron J. Seigo" Date: Wed, 21 Oct 2009 07:53:49 +0000 Subject: [PATCH] AnimationGroup support and QGraphicsWidget* registration; one can now do things like: l = new Label; l.text = 'check this out' fadeAnim = animation("fade") fadeAnim.widgetToAnimate = l rotateAnim = animation("rotate") animGroup = new AnimationGroup animGroup.parallel = true animGroup.add(fadeAnim) animGroup.add(rotateAnim) animGroup.start() and watch the label flip fade out while the whole plasmoid rotates. sweet. svn path=/trunk/KDE/kdebase/runtime/; revision=1038372 --- .../javascript/simplejavascriptapplet.cpp | 51 ++++++++++++++++++- .../javascript/simplejavascriptapplet.h | 1 + 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/scriptengines/javascript/simplejavascriptapplet.cpp b/scriptengines/javascript/simplejavascriptapplet.cpp index 2230cda2e..35071c71b 100644 --- a/scriptengines/javascript/simplejavascriptapplet.cpp +++ b/scriptengines/javascript/simplejavascriptapplet.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -51,6 +52,8 @@ Q_DECLARE_METATYPE(Applet*) Q_DECLARE_METATYPE(QGraphicsWidget*) Q_DECLARE_METATYPE(QGraphicsLayout*) Q_DECLARE_METATYPE(KConfigGroup) +Q_DECLARE_METATYPE(Plasma::AbstractAnimation *) +Q_DECLARE_METATYPE(Plasma::AnimationGroup *) Q_SCRIPT_DECLARE_QMETAOBJECT(AppletInterface, SimpleJavaScriptApplet*) @@ -376,12 +379,38 @@ void SimpleJavaScriptApplet::importExtensions() */ } +typedef AbstractAnimation* AbstractAnimationPtr; +QScriptValue qScriptValueFromAbstractAnimation(QScriptEngine *engine, const AbstractAnimationPtr &anim) +{ + return engine->newQObject(const_cast(anim)); +} + +void abstractAnimationFromQScriptValue(const QScriptValue &scriptValue, AbstractAnimationPtr &anim) +{ + QObject *obj = scriptValue.toQObject(); + anim = static_cast(obj); +} + +typedef QGraphicsWidget * QGraphicsWidgetPtr; +QScriptValue qScriptValueFromQGraphicsWidget(QScriptEngine *engine, const QGraphicsWidgetPtr &anim) +{ + return engine->newQObject(const_cast(anim)); +} + +void qGraphicsWidgetFromQScriptValue(const QScriptValue &scriptValue, QGraphicsWidgetPtr &anim) +{ + QObject *obj = scriptValue.toQObject(); + anim = static_cast(obj); +} + void SimpleJavaScriptApplet::setupObjects() { QScriptValue global = m_engine->globalObject(); // Bindings for animations global.setProperty("animation", m_engine->newFunction(SimpleJavaScriptApplet::animation)); + qScriptRegisterMetaType(m_engine, qScriptValueFromAbstractAnimation, abstractAnimationFromQScriptValue); + global.setProperty("AnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::animationGroup)); // Bindings for data engine m_engine->setDefaultPrototype(qMetaTypeId(), m_engine->newQObject(new DataEngine())); @@ -412,6 +441,7 @@ void SimpleJavaScriptApplet::setupObjects() // Add a global loadui method for ui files + qScriptRegisterMetaType(m_engine, qScriptValueFromQGraphicsWidget, qGraphicsWidgetFromQScriptValue); QScriptValue fun = m_engine->newFunction(SimpleJavaScriptApplet::loadui); global.setProperty("loadui", fun); @@ -531,11 +561,30 @@ QScriptValue SimpleJavaScriptApplet::animation(QScriptContext *context, QScriptE return context->throwError(i18n("Could not extract the Applet")); } - Plasma::AbstractAnimation *anim = Plasma::Animator::create(s_animationDefs.value(animName)); + Plasma::AbstractAnimation *anim = Plasma::Animator::create(s_animationDefs.value(animName), interface->applet()); anim->setWidgetToAnimate(interface->applet()); return engine->newQObject(anim); } +QScriptValue SimpleJavaScriptApplet::animationGroup(QScriptContext *context, QScriptEngine *engine) +{ + QScriptValue appletValue = engine->globalObject().property("plasmoid"); + //kDebug() << "appletValue is " << appletValue.toString(); + + QObject *appletObject = appletValue.toQObject(); + if (!appletObject) { + return context->throwError(i18n("Could not extract the AppletObject")); + } + + AppletInterface *interface = qobject_cast(appletObject); + if (!interface) { + return context->throwError(i18n("Could not extract the Applet")); + } + + Plasma::AnimationGroup *group = new Plasma::AnimationGroup(interface->applet()); + return engine->newQObject(group); +} + QScriptValue SimpleJavaScriptApplet::loadui(QScriptContext *context, QScriptEngine *engine) { if (context->argumentCount() != 1) { diff --git a/scriptengines/javascript/simplejavascriptapplet.h b/scriptengines/javascript/simplejavascriptapplet.h index 4d7c719ce..db093cff7 100644 --- a/scriptengines/javascript/simplejavascriptapplet.h +++ b/scriptengines/javascript/simplejavascriptapplet.h @@ -67,6 +67,7 @@ private: static QString findSvg(QScriptEngine *engine, const QString &file); static QScriptValue animation(QScriptContext *context, QScriptEngine *engine); + static QScriptValue animationGroup(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine); static QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine);