an embryo of Service access
svn path=/trunk/KDE/kdebase/workspace/plasma/scriptengines/javascript/; revision=906206
This commit is contained in:
parent
c83a293c40
commit
35a255722e
@ -23,14 +23,19 @@
|
|||||||
#include <KDebug>
|
#include <KDebug>
|
||||||
|
|
||||||
#include <Plasma/DataEngine>
|
#include <Plasma/DataEngine>
|
||||||
|
#include <Plasma/Service>
|
||||||
|
#include <Plasma/ServiceJob>
|
||||||
|
|
||||||
using namespace Plasma;
|
using namespace Plasma;
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(DataEngine*)
|
Q_DECLARE_METATYPE(DataEngine*)
|
||||||
|
Q_DECLARE_METATYPE(Service*)
|
||||||
|
Q_DECLARE_METATYPE(ServiceJob*)
|
||||||
Q_DECLARE_METATYPE(QVariant)
|
Q_DECLARE_METATYPE(QVariant)
|
||||||
Q_DECLARE_METATYPE(DataEngine::Dict)
|
Q_DECLARE_METATYPE(DataEngine::Dict)
|
||||||
Q_DECLARE_METATYPE(DataEngine::Data)
|
Q_DECLARE_METATYPE(DataEngine::Data)
|
||||||
|
|
||||||
|
|
||||||
template <class M>
|
template <class M>
|
||||||
QScriptValue qScriptValueFromMap(QScriptEngine *eng, const M &map)
|
QScriptValue qScriptValueFromMap(QScriptEngine *eng, const M &map)
|
||||||
{
|
{
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <KDebug>
|
#include <KDebug>
|
||||||
#include <KLocale>
|
#include <KLocale>
|
||||||
#include <KStandardDirs>
|
#include <KStandardDirs>
|
||||||
|
#include <KConfigGroup>
|
||||||
|
|
||||||
#include <Plasma/Applet>
|
#include <Plasma/Applet>
|
||||||
#include <Plasma/Svg>
|
#include <Plasma/Svg>
|
||||||
@ -47,6 +48,7 @@ Q_DECLARE_METATYPE(AppletInterface*)
|
|||||||
Q_DECLARE_METATYPE(Applet*)
|
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_SCRIPT_DECLARE_QMETAOBJECT(AppletInterface, SimpleJavaScriptApplet*)
|
Q_SCRIPT_DECLARE_QMETAOBJECT(AppletInterface, SimpleJavaScriptApplet*)
|
||||||
|
|
||||||
@ -59,6 +61,15 @@ QScriptValue constructQRectFClass(QScriptEngine *engine);
|
|||||||
QScriptValue constructQPointClass(QScriptEngine *engine);
|
QScriptValue constructQPointClass(QScriptEngine *engine);
|
||||||
QScriptValue constructQSizeFClass(QScriptEngine *engine);
|
QScriptValue constructQSizeFClass(QScriptEngine *engine);
|
||||||
|
|
||||||
|
class DummyService : public Service
|
||||||
|
{
|
||||||
|
ServiceJob *createJob(const QString &operation,
|
||||||
|
QMap<QString, QVariant> ¶meters)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Workaround the fact that QtScripts handling of variants seems a bit broken.
|
* Workaround the fact that QtScripts handling of variants seems a bit broken.
|
||||||
*/
|
*/
|
||||||
@ -116,6 +127,37 @@ QScriptValue qScriptValueFromData(QScriptEngine *engine, const DataEngine::Data
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QScriptValue qScriptValueFromKConfigGroup(QScriptEngine *engine, const KConfigGroup &config)
|
||||||
|
{
|
||||||
|
QScriptValue obj = engine->newObject();
|
||||||
|
|
||||||
|
if (!config.isValid()) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<QString, QString> entryMap = config.entryMap();
|
||||||
|
QMap<QString, QString>::const_iterator it = entryMap.begin();
|
||||||
|
QMap<QString, QString>::const_iterator begin = it;
|
||||||
|
QMap<QString, QString>::const_iterator end = entryMap.end();
|
||||||
|
|
||||||
|
for (it = begin; it != end; ++it) {
|
||||||
|
//kDebug() << "setting" << it.key() << "to" << it.value();
|
||||||
|
QString prop = it.key();
|
||||||
|
prop.replace(' ', '_');
|
||||||
|
obj.setProperty(prop, variant2ScriptValue(engine, it.value()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
void kConfigGroupFromScriptValue(const QScriptValue& obj, KConfigGroup &config)
|
||||||
|
{
|
||||||
|
QScriptValueIterator it(obj);
|
||||||
|
|
||||||
|
while (it.hasNext()) {
|
||||||
|
config.writeEntry(it.name(), it.value().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SimpleJavaScriptApplet::SimpleJavaScriptApplet(QObject *parent, const QVariantList &args)
|
SimpleJavaScriptApplet::SimpleJavaScriptApplet(QObject *parent, const QVariantList &args)
|
||||||
: Plasma::AppletScript(parent)
|
: Plasma::AppletScript(parent)
|
||||||
@ -329,6 +371,8 @@ void SimpleJavaScriptApplet::setupObjects()
|
|||||||
|
|
||||||
// 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()));
|
||||||
|
m_engine->setDefaultPrototype(qMetaTypeId<Service*>(), m_engine->newQObject(new DummyService()));
|
||||||
|
m_engine->setDefaultPrototype(qMetaTypeId<ServiceJob*>(), m_engine->newQObject(new ServiceJob(QString(), QString(), QMap<QString, QVariant>())));
|
||||||
#if 0
|
#if 0
|
||||||
fun = m_engine->newFunction(SimpleJavaScriptApplet::dataEngine);
|
fun = m_engine->newFunction(SimpleJavaScriptApplet::dataEngine);
|
||||||
m_self.setProperty("dataEngine", fun);
|
m_self.setProperty("dataEngine", fun);
|
||||||
@ -339,6 +383,7 @@ void SimpleJavaScriptApplet::setupObjects()
|
|||||||
// qScriptRegisterMapMetaType<DataEngine::Dict>(m_engine);
|
// qScriptRegisterMapMetaType<DataEngine::Dict>(m_engine);
|
||||||
// qScriptRegisterMapMetaType<DataEngine::Data>(m_engine);
|
// qScriptRegisterMapMetaType<DataEngine::Data>(m_engine);
|
||||||
qScriptRegisterMetaType<DataEngine::Data>(m_engine, qScriptValueFromData, 0, QScriptValue());
|
qScriptRegisterMetaType<DataEngine::Data>(m_engine, qScriptValueFromData, 0, QScriptValue());
|
||||||
|
qScriptRegisterMetaType<KConfigGroup>(m_engine, qScriptValueFromKConfigGroup, kConfigGroupFromScriptValue, QScriptValue());
|
||||||
|
|
||||||
// Expose applet interface
|
// Expose applet interface
|
||||||
m_interface = new AppletInterface(this);
|
m_interface = new AppletInterface(this);
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
engine = dataEngine("nowplaying");
|
||||||
|
players = engine.sources;
|
||||||
|
watchingPlayer = players[0];
|
||||||
|
controller = engine.serviceForSource(watchingPlayer);
|
||||||
|
|
||||||
plasmoid.dataUpdate = function(a, b)
|
plasmoid.dataUpdate = function(a, b)
|
||||||
{
|
{
|
||||||
label.text = "Playing " + b.Title + " by " + b.Artist + ". time: " +
|
label.text = "Playing " + b.Title + " by " + b.Artist + ". time: " +
|
||||||
@ -6,6 +11,13 @@ plasmoid.dataUpdate = function(a, b)
|
|||||||
|
|
||||||
plasmoid.stop = function()
|
plasmoid.stop = function()
|
||||||
{
|
{
|
||||||
|
data = engine.serviceForSource(watchingPlayer).operationDescription("stop");
|
||||||
|
print(data+controller.name());
|
||||||
|
for ( var i in data ) {
|
||||||
|
print(i + ' -> ' + data[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.startOperationCall(controller.operationDescription("stop"));
|
||||||
print("stopping");
|
print("stopping");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,6 +30,9 @@ stop = new PushButton();
|
|||||||
stop.text = "Stop";
|
stop.text = "Stop";
|
||||||
layout.addItem(stop);
|
layout.addItem(stop);
|
||||||
|
|
||||||
|
controller.associateWidget(stop, "stop");
|
||||||
|
print(controller.operationNames());
|
||||||
|
|
||||||
stop["clicked()"].connect(plasmoid.stop);
|
stop["clicked()"].connect(plasmoid.stop);
|
||||||
|
|
||||||
plasmoid.dataEngine("nowplaying").connectSource("org.mpris.amarok", plasmoid, 500);
|
engine.connectSource(watchingPlayer, plasmoid, 500);
|
Loading…
Reference in New Issue
Block a user