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)
{
QScriptContext *c = context();
if (c && c->parentContext()) {
QScriptValue v = c->parentContext()->activationObject().property("__plasma_package");
//kDebug() << "variant in parent context?" << v.isVariant() << t.restart();
return file(fileType, filePath, context());
}
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()) {
return v.toVariant().value<Plasma::Package>().filePath(fileType.toLocal8Bit().constData(), filePath);
//kDebug() << "path to package is" << p.path();
const QString path = v.toVariant().value<Plasma::Package>().filePath(fileType.toLocal8Bit().constData(), filePath);
if (!path.isEmpty()) {
return path;
}
}
c = c->parentContext();
}
//kDebug() << "old school attempt";
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, const QString &filePath);
QString file(const QString &fileType, const QString &filePath, QScriptContext *context);
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);
}
QString SimpleJavaScriptApplet::findSvg(QScriptEngine *engine, const QString &file)
QString SimpleJavaScriptApplet::findSvg(QScriptContext *context, QScriptEngine *engine, const QString &file)
{
AppletInterface *interface = AppletInterface::extract(engine);
if (!interface) {
return file;
}
QString path = interface->file("images", file + ".svg");
QString path = interface->file("images", file + ".svg", context);
if (path.isEmpty()) {
path = interface->file("images", file + ".svgz");
path = interface->file("images", file + ".svgz", context);
if (path.isEmpty()) {
return file;
@ -727,7 +727,7 @@ QScriptValue SimpleJavaScriptApplet::newPlasmaSvg(QScriptContext *context, QScri
bool parentedToApplet = false;
QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet);
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);
ScriptEnv::registerEnums(fun, *svg->metaObject());
return fun;
@ -744,7 +744,7 @@ QScriptValue SimpleJavaScriptApplet::newPlasmaFrameSvg(QScriptContext *context,
bool parentedToApplet = false;
QGraphicsWidget *parent = extractParent(context, engine, 1, &parentedToApplet);
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);
ScriptEnv::registerEnums(fun, *frameSvg->metaObject());

View File

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