* Support KUrl, QUrl and QColor in script value conversion

* Use variantToScriptValue in readConfig

svn path=/trunk/KDE/kdebase/workspace/plasma/scriptengines/javascript/; revision=948060
This commit is contained in:
Petri Damstén 2009-04-02 06:15:22 +00:00
parent 8de938b689
commit 0e5af26cb0
4 changed files with 29 additions and 11 deletions

View File

@ -154,9 +154,11 @@ void AppletInterface::writeConfig(const QString &entry, const QVariant &value)
}
}
QVariant AppletInterface::readConfig(const QString &entry) const
QScriptValue AppletInterface::readConfig(const QString &entry) const
{
Plasma::ConfigLoader *config = 0;
QVariant result;
if (m_currentConfig.isEmpty()) {
config = applet()->configScheme();
} else {
@ -164,10 +166,9 @@ QVariant AppletInterface::readConfig(const QString &entry) const
}
if (config) {
return config->property(entry);
result = config->property(entry);
}
return QVariant();
return m_appletScriptEngine->variantToScriptValue(result);
}
const Plasma::Package *AppletInterface::package() const

View File

@ -21,6 +21,7 @@
#define APPLETINTERFACE_H
#include <QObject>
#include <QScriptValue>
#include <Plasma/DataEngine>
class QAction;
@ -140,7 +141,7 @@ enum QtOrientation {
Q_INVOKABLE void setActiveConfig(const QString &name);
Q_INVOKABLE QVariant readConfig(const QString &entry) const;
Q_INVOKABLE QScriptValue readConfig(const QString &entry) const;
Q_INVOKABLE void writeConfig(const QString &entry, const QVariant &value);

View File

@ -80,7 +80,7 @@ public:
/*
* Workaround the fact that QtScripts handling of variants seems a bit broken.
*/
QScriptValue variant2ScriptValue(QScriptEngine *engine, QVariant var)
QScriptValue variantToScriptValue(QScriptEngine *engine, QVariant var)
{
if (var.isNull()) {
return engine->nullValue();
@ -110,6 +110,13 @@ QScriptValue variant2ScriptValue(QScriptEngine *engine, QVariant var)
case QVariant::UInt:
return QScriptValue(engine, var.toUInt());
default:
if (var.typeName() == QLatin1String("KUrl")) {
return QScriptValue(engine, var.value<KUrl>().prettyUrl());
} else if (var.typeName() == QLatin1String("QColor")) {
return QScriptValue(engine, var.value<QColor>().name());
} else if (var.typeName() == QLatin1String("QUrl")) {
return QScriptValue(engine, var.value<QUrl>().toString());
}
break;
}
@ -160,7 +167,7 @@ QScriptValue qScriptValueFromData(QScriptEngine *engine, const DataEngine::Data
//kDebug() << "setting" << it.key() << "to" << it.value();
QString prop = it.key();
prop.replace(' ', '_');
obj.setProperty(prop, variant2ScriptValue(engine, it.value()));
obj.setProperty(prop, variantToScriptValue(engine, it.value()));
}
return obj;
@ -187,7 +194,7 @@ QScriptValue qScriptValueFromKConfigGroup(QScriptEngine *engine, const KConfigGr
//kDebug() << "setting" << it.key() << "to" << it.value();
QString prop = it.key();
prop.replace(' ', '_');
obj.setProperty(prop, variant2ScriptValue(engine, it.value()));
obj.setProperty(prop, variantToScriptValue(engine, it.value()));
}
return obj;
@ -227,6 +234,7 @@ KSharedPtr<UiLoader> SimpleJavaScriptApplet::s_widgetLoader;
SimpleJavaScriptApplet::SimpleJavaScriptApplet(QObject *parent, const QVariantList &args)
: Plasma::AppletScript(parent)
{
Q_UNUSED(args)
// kDebug() << "Script applet launched, args" << applet()->startupArguments();
m_engine = new QScriptEngine(this);
@ -436,7 +444,7 @@ void SimpleJavaScriptApplet::setupObjects()
QScriptValue args = m_engine->newArray();
int i = 0;
foreach (QVariant arg, applet()->startupArguments()) {
args.setProperty(i, variant2ScriptValue(m_engine, arg));
args.setProperty(i, variantToScriptValue(arg));
++i;
}
global.setProperty("startupArguments", args);
@ -723,6 +731,7 @@ QScriptValue SimpleJavaScriptApplet::createWidget(QScriptContext *context, QScri
QScriptValue SimpleJavaScriptApplet::notSupported(QScriptContext *context, QScriptEngine *engine)
{
Q_UNUSED(engine)
QString message = context->callee().property("message").toString();
return context->throwError(i18n("This operation was not supported, %1", message) );
}
@ -747,6 +756,11 @@ QScriptValue SimpleJavaScriptApplet::createPrototype(QScriptEngine *engine, cons
return proto;
}
QScriptValue SimpleJavaScriptApplet::variantToScriptValue(QVariant var)
{
return ::variantToScriptValue(m_engine, var);
}
K_EXPORT_PLASMA_APPLETSCRIPTENGINE(qscriptapplet, SimpleJavaScriptApplet)
#include "simplejavascriptapplet.moc"

View File

@ -49,6 +49,8 @@ public:
Q_INVOKABLE QString findDataResource( const QString &filename );
Q_INVOKABLE void debug( const QString &msg );
QScriptValue variantToScriptValue(QVariant var);
public slots:
void dataUpdated( const QString &name, const Plasma::DataEngine::Data &data );
void configChanged();