diff --git a/scriptengines/javascript/simplejavascriptapplet.cpp b/scriptengines/javascript/simplejavascriptapplet.cpp index bf183d448..2230cda2e 100644 --- a/scriptengines/javascript/simplejavascriptapplet.cpp +++ b/scriptengines/javascript/simplejavascriptapplet.cpp @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -169,6 +170,7 @@ void registerEnums(QScriptEngine *engine, QScriptValue &scriptValue, const QMeta } KSharedPtr SimpleJavaScriptApplet::s_widgetLoader; +QHash SimpleJavaScriptApplet::s_animationDefs; SimpleJavaScriptApplet::SimpleJavaScriptApplet(QObject *parent, const QVariantList &args) : Plasma::AppletScript(parent) @@ -316,9 +318,23 @@ void SimpleJavaScriptApplet::constraintsEvent(Plasma::Constraints constraints) } } +void SimpleJavaScriptApplet::populateAnimationsHash() +{ + if (s_animationDefs.isEmpty()) { + s_animationDefs.insert("fade", Plasma::Animator::FadeAnimation); + s_animationDefs.insert("grow", Plasma::Animator::GrowAnimation); + s_animationDefs.insert("expand", Plasma::Animator::ExpandAnimation); + s_animationDefs.insert("pulse", Plasma::Animator::PulseAnimation); + s_animationDefs.insert("rotate", Plasma::Animator::RotationAnimation); + s_animationDefs.insert("rotateStacked", Plasma::Animator::RotationStackedAnimation); + s_animationDefs.insert("slide", Plasma::Animator::SlideAnimation); + } +} + bool SimpleJavaScriptApplet::init() { setupObjects(); + populateAnimationsHash(); kDebug() << "ScriptName:" << applet()->name(); kDebug() << "ScriptCategory:" << applet()->category(); @@ -364,6 +380,9 @@ void SimpleJavaScriptApplet::setupObjects() { QScriptValue global = m_engine->globalObject(); + // Bindings for animations + global.setProperty("animation", m_engine->newFunction(SimpleJavaScriptApplet::animation)); + // Bindings for data engine m_engine->setDefaultPrototype(qMetaTypeId(), m_engine->newQObject(new DataEngine())); m_engine->setDefaultPrototype(qMetaTypeId(), m_engine->newQObject(new DummyService())); @@ -488,6 +507,35 @@ QScriptValue SimpleJavaScriptApplet::service(QScriptContext *context, QScriptEng return engine->newQObject(service); } +QScriptValue SimpleJavaScriptApplet::animation(QScriptContext *context, QScriptEngine *engine) +{ + if (context->argumentCount() != 1) { + return context->throwError(i18n("animation() takes one argument")); + } + + QString animName = context->argument(0).toString().toLower(); + if (!s_animationDefs.contains(animName)) { + return context->throwError(i18n("%1 is not a known animation type", animName)); + } + + 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::AbstractAnimation *anim = Plasma::Animator::create(s_animationDefs.value(animName)); + anim->setWidgetToAnimate(interface->applet()); + return engine->newQObject(anim); +} + QScriptValue SimpleJavaScriptApplet::loadui(QScriptContext *context, QScriptEngine *engine) { if (context->argumentCount() != 1) { diff --git a/scriptengines/javascript/simplejavascriptapplet.h b/scriptengines/javascript/simplejavascriptapplet.h index d9e2184f9..4d7c719ce 100644 --- a/scriptengines/javascript/simplejavascriptapplet.h +++ b/scriptengines/javascript/simplejavascriptapplet.h @@ -21,6 +21,7 @@ #include +#include #include #include @@ -62,8 +63,10 @@ private: void importExtensions(); void setupObjects(); void callFunction(const QString &functionName, const QScriptValueList &args = QScriptValueList()); + static void populateAnimationsHash(); static QString findSvg(QScriptEngine *engine, const QString &file); + static QScriptValue animation(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); @@ -78,10 +81,11 @@ private: static QScriptValue createWidget(QScriptContext *context, QScriptEngine *engine); static QScriptValue notSupported(QScriptContext *context, QScriptEngine *engine); static QScriptValue print(QScriptContext *context, QScriptEngine *engine); - static QScriptValue createPrototype( QScriptEngine *engine, const QString &name ); + static QScriptValue createPrototype(QScriptEngine *engine, const QString &name); private: static KSharedPtr s_widgetLoader; + static QHash s_animationDefs; QScriptEngine *m_engine; QScriptValue m_self; QVariantList m_args;