make addon packages work with Svg objects as well (and just about everything else that we might need in future); need to replicate this for DataEngine and Runner now.

svn path=/trunk/KDE/kdebase/runtime/; revision=1171497
This commit is contained in:
Aaron J. Seigo 2010-09-04 00:27:45 +00:00
parent de6c425f17
commit 603096a318
4 changed files with 22 additions and 12 deletions

View File

@ -200,16 +200,25 @@ QString AppletInterface::file(const QString &fileType)
QString AppletInterface::file(const QString &fileType, const QString &filePath) QString AppletInterface::file(const QString &fileType, const QString &filePath)
{ {
QScriptContext *c = context(); return file(fileType, filePath, context());
if (c && c->parentContext()) { }
QScriptValue v = c->parentContext()->activationObject().property("__plasma_package");
//kDebug() << "variant in parent context?" << v.isVariant() << t.restart(); QString AppletInterface::file(const QString &fileType, const QString &filePath, QScriptContext *c)
{
while (c) {
QScriptValue v = c->activationObject().property("__plasma_package");
//kDebug() << "variant in parent context?" << v.isVariant();
if (v.isVariant()) { if (v.isVariant()) {
return v.toVariant().value<Plasma::Package>().filePath(fileType.toLocal8Bit().constData(), filePath); const QString path = v.toVariant().value<Plasma::Package>().filePath(fileType.toLocal8Bit().constData(), filePath);
//kDebug() << "path to package is" << p.path(); if (!path.isEmpty()) {
return path;
}
} }
c = c->parentContext();
} }
//kDebug() << "old school attempt";
return m_appletScriptEngine->package()->filePath(fileType.toLocal8Bit().constData(), filePath); return m_appletScriptEngine->package()->filePath(fileType.toLocal8Bit().constData(), filePath);
} }

View File

@ -268,6 +268,7 @@ enum IntervalAlignment {
Q_INVOKABLE QString file(const QString &fileType); Q_INVOKABLE QString file(const QString &fileType);
Q_INVOKABLE QString file(const QString &fileType, const QString &filePath); Q_INVOKABLE QString file(const QString &fileType, const QString &filePath);
QString file(const QString &fileType, const QString &filePath, QScriptContext *context);
Q_INVOKABLE bool include(const QString &script); Q_INVOKABLE bool include(const QString &script);

View File

@ -698,16 +698,16 @@ QScriptValue SimpleJavaScriptApplet::loadui(QScriptContext *context, QScriptEngi
return engine->newQObject(w, QScriptEngine::AutoOwnership); return engine->newQObject(w, QScriptEngine::AutoOwnership);
} }
QString SimpleJavaScriptApplet::findSvg(QScriptEngine *engine, const QString &file) QString SimpleJavaScriptApplet::findSvg(QScriptContext *context, QScriptEngine *engine, const QString &file)
{ {
AppletInterface *interface = AppletInterface::extract(engine); AppletInterface *interface = AppletInterface::extract(engine);
if (!interface) { if (!interface) {
return file; return file;
} }
QString path = interface->file("images", file + ".svg"); QString path = interface->file("images", file + ".svg", context);
if (path.isEmpty()) { if (path.isEmpty()) {
path = interface->file("images", file + ".svgz"); path = interface->file("images", file + ".svgz", context);
if (path.isEmpty()) { if (path.isEmpty()) {
return file; return file;
@ -727,7 +727,7 @@ QScriptValue SimpleJavaScriptApplet::newPlasmaSvg(QScriptContext *context, QScri
bool parentedToApplet = false; bool parentedToApplet = false;
QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet); QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet);
Svg *svg = new Svg(parent); Svg *svg = new Svg(parent);
svg->setImagePath(parentedToApplet ? findSvg(engine, filename) : filename); svg->setImagePath(parentedToApplet ? findSvg(context, engine, filename) : filename);
QScriptValue fun = engine->newQObject(svg); QScriptValue fun = engine->newQObject(svg);
ScriptEnv::registerEnums(fun, *svg->metaObject()); ScriptEnv::registerEnums(fun, *svg->metaObject());
return fun; return fun;
@ -744,7 +744,7 @@ QScriptValue SimpleJavaScriptApplet::newPlasmaFrameSvg(QScriptContext *context,
bool parentedToApplet = false; bool parentedToApplet = false;
QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet); QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet);
FrameSvg *frameSvg = new FrameSvg(parent); FrameSvg *frameSvg = new FrameSvg(parent);
frameSvg->setImagePath(parentedToApplet ? filename : findSvg(engine, filename)); frameSvg->setImagePath(parentedToApplet ? filename : findSvg(context, engine, filename));
QScriptValue fun = engine->newQObject(frameSvg); QScriptValue fun = engine->newQObject(frameSvg);
ScriptEnv::registerEnums(fun, *frameSvg->metaObject()); ScriptEnv::registerEnums(fun, *frameSvg->metaObject());

View File

@ -80,7 +80,7 @@ private:
QScriptValue createWheelEventObject(QGraphicsSceneWheelEvent *event); QScriptValue createWheelEventObject(QGraphicsSceneWheelEvent *event);
static void populateAnimationsHash(); static void populateAnimationsHash();
static QString findSvg(QScriptEngine *engine, const QString &file); static QString findSvg(QScriptContext *context, 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 animationGroup(QScriptContext *context, QScriptEngine *engine);
static QScriptValue parallelAnimationGroup(QScriptContext *context, QScriptEngine *engine); static QScriptValue parallelAnimationGroup(QScriptContext *context, QScriptEngine *engine);