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
This commit is contained in:
parent
2385ce930d
commit
f5cb7c67a7
@ -30,6 +30,7 @@
|
|||||||
#include <KConfigGroup>
|
#include <KConfigGroup>
|
||||||
|
|
||||||
#include <Plasma/AbstractAnimation>
|
#include <Plasma/AbstractAnimation>
|
||||||
|
#include <Plasma/AnimationGroup>
|
||||||
#include <Plasma/Applet>
|
#include <Plasma/Applet>
|
||||||
#include <Plasma/Svg>
|
#include <Plasma/Svg>
|
||||||
#include <Plasma/FrameSvg>
|
#include <Plasma/FrameSvg>
|
||||||
@ -51,6 +52,8 @@ Q_DECLARE_METATYPE(Applet*)
|
|||||||
Q_DECLARE_METATYPE(QGraphicsWidget*)
|
Q_DECLARE_METATYPE(QGraphicsWidget*)
|
||||||
Q_DECLARE_METATYPE(QGraphicsLayout*)
|
Q_DECLARE_METATYPE(QGraphicsLayout*)
|
||||||
Q_DECLARE_METATYPE(KConfigGroup)
|
Q_DECLARE_METATYPE(KConfigGroup)
|
||||||
|
Q_DECLARE_METATYPE(Plasma::AbstractAnimation *)
|
||||||
|
Q_DECLARE_METATYPE(Plasma::AnimationGroup *)
|
||||||
|
|
||||||
Q_SCRIPT_DECLARE_QMETAOBJECT(AppletInterface, SimpleJavaScriptApplet*)
|
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<AbstractAnimation *>(anim));
|
||||||
|
}
|
||||||
|
|
||||||
|
void abstractAnimationFromQScriptValue(const QScriptValue &scriptValue, AbstractAnimationPtr &anim)
|
||||||
|
{
|
||||||
|
QObject *obj = scriptValue.toQObject();
|
||||||
|
anim = static_cast<AbstractAnimation *>(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef QGraphicsWidget * QGraphicsWidgetPtr;
|
||||||
|
QScriptValue qScriptValueFromQGraphicsWidget(QScriptEngine *engine, const QGraphicsWidgetPtr &anim)
|
||||||
|
{
|
||||||
|
return engine->newQObject(const_cast<QGraphicsWidget *>(anim));
|
||||||
|
}
|
||||||
|
|
||||||
|
void qGraphicsWidgetFromQScriptValue(const QScriptValue &scriptValue, QGraphicsWidgetPtr &anim)
|
||||||
|
{
|
||||||
|
QObject *obj = scriptValue.toQObject();
|
||||||
|
anim = static_cast<QGraphicsWidget *>(obj);
|
||||||
|
}
|
||||||
|
|
||||||
void SimpleJavaScriptApplet::setupObjects()
|
void SimpleJavaScriptApplet::setupObjects()
|
||||||
{
|
{
|
||||||
QScriptValue global = m_engine->globalObject();
|
QScriptValue global = m_engine->globalObject();
|
||||||
|
|
||||||
// Bindings for animations
|
// Bindings for animations
|
||||||
global.setProperty("animation", m_engine->newFunction(SimpleJavaScriptApplet::animation));
|
global.setProperty("animation", m_engine->newFunction(SimpleJavaScriptApplet::animation));
|
||||||
|
qScriptRegisterMetaType<AbstractAnimation*>(m_engine, qScriptValueFromAbstractAnimation, abstractAnimationFromQScriptValue);
|
||||||
|
global.setProperty("AnimationGroup", m_engine->newFunction(SimpleJavaScriptApplet::animationGroup));
|
||||||
|
|
||||||
// Bindings for data engine
|
// Bindings for data engine
|
||||||
m_engine->setDefaultPrototype(qMetaTypeId<DataEngine*>(), m_engine->newQObject(new DataEngine()));
|
m_engine->setDefaultPrototype(qMetaTypeId<DataEngine*>(), m_engine->newQObject(new DataEngine()));
|
||||||
@ -412,6 +441,7 @@ void SimpleJavaScriptApplet::setupObjects()
|
|||||||
|
|
||||||
|
|
||||||
// Add a global loadui method for ui files
|
// Add a global loadui method for ui files
|
||||||
|
qScriptRegisterMetaType<QGraphicsWidget*>(m_engine, qScriptValueFromQGraphicsWidget, qGraphicsWidgetFromQScriptValue);
|
||||||
QScriptValue fun = m_engine->newFunction(SimpleJavaScriptApplet::loadui);
|
QScriptValue fun = m_engine->newFunction(SimpleJavaScriptApplet::loadui);
|
||||||
global.setProperty("loadui", fun);
|
global.setProperty("loadui", fun);
|
||||||
|
|
||||||
@ -531,11 +561,30 @@ QScriptValue SimpleJavaScriptApplet::animation(QScriptContext *context, QScriptE
|
|||||||
return context->throwError(i18n("Could not extract the Applet"));
|
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());
|
anim->setWidgetToAnimate(interface->applet());
|
||||||
return engine->newQObject(anim);
|
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<AppletInterface*>(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)
|
QScriptValue SimpleJavaScriptApplet::loadui(QScriptContext *context, QScriptEngine *engine)
|
||||||
{
|
{
|
||||||
if (context->argumentCount() != 1) {
|
if (context->argumentCount() != 1) {
|
||||||
|
@ -67,6 +67,7 @@ private:
|
|||||||
|
|
||||||
static QString findSvg(QScriptEngine *engine, const QString &file);
|
static QString findSvg(QScriptEngine *engine, const QString &file);
|
||||||
static QScriptValue animation(QScriptContext *context, QScriptEngine *engine);
|
static QScriptValue animation(QScriptContext *context, QScriptEngine *engine);
|
||||||
|
static QScriptValue animationGroup(QScriptContext *context, QScriptEngine *engine);
|
||||||
static QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine);
|
static QScriptValue jsi18n(QScriptContext *context, QScriptEngine *engine);
|
||||||
static QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine);
|
static QScriptValue jsi18nc(QScriptContext *context, QScriptEngine *engine);
|
||||||
static QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine);
|
static QScriptValue jsi18np(QScriptContext *context, QScriptEngine *engine);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user