summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2013-10-31 16:17:22 +0100
committerPierre Rossi <pierre.rossi@gmail.com>2013-11-01 13:57:47 +0100
commitc7e878cd16487c39589fcaf099921307ba169545 (patch)
treef046092d3c50be9519958a5372b1998cc8f37013 /src
parent27c78b641ad35adf8094643ec14694781b1efa58 (diff)
downloadqtwebchannel-c7e878cd16487c39589fcaf099921307ba169545.tar.gz
Simplify code by doing more in QML and less in C++
Change-Id: I4f4f101b40b3f509371819100ad70d2b2a5731f4 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/MetaObjectPublisher.qml51
-rw-r--r--src/qtmetaobjectpublisher.cpp21
-rw-r--r--src/qtmetaobjectpublisher.h26
3 files changed, 43 insertions, 55 deletions
diff --git a/src/MetaObjectPublisher.qml b/src/MetaObjectPublisher.qml
index 60da753..f182c7f 100644
--- a/src/MetaObjectPublisher.qml
+++ b/src/MetaObjectPublisher.qml
@@ -40,44 +40,67 @@
****************************************************************************/
import QtQuick 2.0
-
import Qt.labs.WebChannel 1.0
MetaObjectPublisherPrivate
{
+ /**
+ * This map contains the registered objects indexed by their name.
+ */
+ property variant registeredObjects
+
+ /**
+ * Handle the given WebChannel client request and write to the given response.
+ *
+ * @return true if the request was handled, false otherwise.
+ */
function handleRequest(payload, webChannel, response)
{
- var object = namedObject(payload.object);
- var ret;
- if (payload.type == "Qt.invokeMethod") {
+ if (!payload.type) {
+ return false;
+ }
+ var object = payload.object ? registeredObjects[payload.object] : null;
+
+ var ret = undefined;
+ if (payload.type === "Qt.invokeMethod" && object) {
ret = (object[payload.method])(payload.args);
- } else if (payload.type == "Qt.connectToSignal") {
+ } else if (payload.type === "Qt.connectToSignal" && object) {
object[payload.signal].connect(
function(a,b,c,d,e,f,g,h,i,j) {
webChannel.broadcast("Qt.signal", JSON.stringify({object: payload.object, signal: payload.signal, args: [a,b,c,d,e,f,g,h,i,j]}));
});
- } else if (payload.type == "Qt.getProperty") {
+ } else if (payload.type === "Qt.getProperty" && object) {
ret = object[payload.property];
- } else if (payload.type == "Qt.setProperty") {
+ } else if (payload.type === "Qt.setProperty" && object) {
object[payload.property] = payload.value;
- } else if (payload.type == "Qt.getObjects") {
- ret = registeredClassInfo();
+ } else if (payload.type === "Qt.getObjects") {
+ var ret = {};
+ for (var name in registeredObjects) {
+ object = registeredObjects[name];
+ if (object) {
+ ret[name] = classInfoForObject(object);
+ }
+ }
+ } else if (payload.type === "Qt.Debug") {
+ console.log("DEBUG: ", payload.message);
} else {
return false;
}
- if (ret) {
+ if (ret != undefined) {
response.send(JSON.stringify(ret));
- } else {
- response.noop();
}
return true;
}
function registerObjects(objects)
{
- for (var name in objects) {
- addObject(name, objects[name]);
+ // joining a JS map and a QML one is not as easy as one would assume...
+ for (var name in registeredObjects) {
+ if (!objects[name]) {
+ objects[name] = registeredObjects[name];
+ }
}
+ registeredObjects = objects;
}
}
diff --git a/src/qtmetaobjectpublisher.cpp b/src/qtmetaobjectpublisher.cpp
index c1ac1c5..b073fb0 100644
--- a/src/qtmetaobjectpublisher.cpp
+++ b/src/qtmetaobjectpublisher.cpp
@@ -40,13 +40,14 @@
****************************************************************************/
#include "qtmetaobjectpublisher.h"
-#include <QVariantMap>
+
#include <QStringList>
#include <QMetaObject>
#include <QMetaProperty>
+#include <QDebug>
-QtMetaObjectPublisher::QtMetaObjectPublisher(QObject *parent) :
- QObject(parent)
+QtMetaObjectPublisher::QtMetaObjectPublisher(QObject *parent)
+ : QObject(parent)
{
}
@@ -71,17 +72,3 @@ QVariantMap QtMetaObjectPublisher::classInfoForObject(QObject *object) const
data["properties"] = qtProperties;
return data;
}
-
-QVariantMap QtMetaObjectPublisher::registeredClassInfo() const
-{
- QVariantMap ret;
-
- QMap< QString, QPointer< QObject > >::const_iterator it = objects.constBegin();
- for (; it != objects.constEnd(); ++it) {
- if (it.value()) {
- ret[it.key()] = classInfoForObject(it.value());
- }
- }
-
- return ret;
-}
diff --git a/src/qtmetaobjectpublisher.h b/src/qtmetaobjectpublisher.h
index 13c4bba..573d120 100644
--- a/src/qtmetaobjectpublisher.h
+++ b/src/qtmetaobjectpublisher.h
@@ -44,37 +44,15 @@
#include <QObject>
#include <QVariantMap>
-#include <QPointer>
-#include <QStringList>
class QtMetaObjectPublisher : public QObject
{
Q_OBJECT
- Q_PROPERTY(QStringList objectNames READ objectNames)
public:
explicit QtMetaObjectPublisher(QObject *parent = 0);
- Q_INVOKABLE QVariantMap classInfoForObject(QObject*) const;
-
- QStringList objectNames() const { return objects.keys(); }
-
- Q_INVOKABLE QObject* namedObject(const QString& name) const
- {
- if (!objects.contains(name))
- return 0;
- return objects[name];
- }
-
- Q_INVOKABLE QVariantMap registeredClassInfo() const;
-public slots:
- void addObject(const QString& name, QObject* object)
- {
- objects[name] = object;
- }
-
-private:
- QMap<QString, QPointer<QObject> > objects;
-
+ Q_INVOKABLE QVariantMap classInfoForObject(QObject *object) const;
};
#endif // QTMETAOBJECTPUBLISHER_H
+