summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@theqtcompany.com>2015-05-21 11:47:27 +0200
committerThomas Hartmann <Thomas.Hartmann@digia.com>2015-05-21 10:11:48 +0000
commitc9eb75e2f889ec7c662d196597b60537855e46b1 (patch)
tree08447b9499038b322a6a8a05dbda8b208ef7a1ab /share
parent0321f6e1a73cc5a032f578754494aab0582ae946 (diff)
downloadqt-creator-c9eb75e2f889ec7c662d196597b60537855e46b1.tar.gz
QmlPuppet: Register callback for notifyPropertyChange
MetaObject cannot have a dependency on ObjectNodeInstance. Instead we register a callback. Change-Id: I9f6e096c67caf1abd525201c9bacd363d31a2fa2 Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp12
-rw-r--r--share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp12
-rw-r--r--share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h1
-rw-r--r--share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp5
-rw-r--r--share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h3
5 files changed, 31 insertions, 2 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
index 720725b7d7..4d94af79d1 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
@@ -110,6 +110,16 @@ namespace {
namespace QmlDesigner {
+static NodeInstanceServer *nodeInstanceServerInstance = 0;
+
+static void notifyPropertyChangeCallBackFunction(QObject *object, const PropertyName &propertyName)
+{
+ qint32 id = nodeInstanceServerInstance->instanceForObject(object).instanceId();
+ nodeInstanceServerInstance->notifyPropertyChange(id, propertyName);
+}
+
+static void (*notifyPropertyChangeCallBackPointer)(QObject *, const PropertyName &) = &notifyPropertyChangeCallBackFunction;
+
NodeInstanceServer::NodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) :
NodeInstanceServerInterface(),
m_childrenChangeEventFilter(new Internal::ChildrenChangeEventFilter(this)),
@@ -122,6 +132,8 @@ NodeInstanceServer::NodeInstanceServer(NodeInstanceClientInterface *nodeInstance
qmlRegisterType<DummyContextObject>("QmlDesigner", 1, 0, "DummyContextObject");
connect(m_childrenChangeEventFilter.data(), SIGNAL(childrenChanged(QObject*)), this, SLOT(emitParentChanged(QObject*)));
+ nodeInstanceServerInstance = this;
+ Internal::QmlPrivateGate::registerNotifyPropertyChangeCallBack(notifyPropertyChangeCallBackPointer);
}
NodeInstanceServer::~NodeInstanceServer()
diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp
index eb79909af6..7a18cda216 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.cpp
@@ -46,6 +46,7 @@ namespace Internal {
namespace QmlPrivateGate {
static QHash<QDynamicMetaObjectData *, bool> nodeInstanceMetaObjectList;
+static void (*notifyPropertyChangeCallBack)(QObject*, const PropertyName &propertyName) = 0;
struct MetaPropertyData {
inline QPair<QVariant, bool> &getDataRef(int idx) {
@@ -328,9 +329,11 @@ void MetaObject::notifyPropertyChange(int id)
if (objectNodeInstance && objectNodeInstance->nodeInstanceServer()) {
if (id < propertyOffset()) {
- objectNodeInstance->nodeInstanceServer()->notifyPropertyChange(objectNodeInstance->instanceId(), propertyById.name());
+ if (notifyPropertyChangeCallBack)
+ notifyPropertyChangeCallBack(myObject(), propertyById.name());
} else {
- objectNodeInstance->nodeInstanceServer()->notifyPropertyChange(objectNodeInstance->instanceId(), name(id - propertyOffset()));
+ if (notifyPropertyChangeCallBack)
+ notifyPropertyChangeCallBack(myObject(), name(id - propertyOffset()));
}
}
}
@@ -350,6 +353,11 @@ void MetaObject::copyTypeMetaObject()
*static_cast<QMetaObject *>(this) = *m_type->metaObject();
}
+void MetaObject::registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &))
+{
+ notifyPropertyChangeCallBack = callback;
+}
+
} // namespace QmlPrivateGate
} // namespace Internal
diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h
index d64c9fb8d5..9668708d92 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/metaobject.h
@@ -58,6 +58,7 @@ class MetaObject : public QQmlVMEMetaObject
public:
~MetaObject();
+ static void registerNotifyPropertyChangeCallBack(void (*callback)(QObject*, const PropertyName &propertyName));
protected:
MetaObject(const ObjectNodeInstancePointer &nodeInstance, QQmlEngine *engine);
diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp
index cb33c07e73..dfb36f886c 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp
@@ -779,6 +779,11 @@ void getPropertyCache(QObject *object, QQmlEngine *engine)
QQmlEnginePrivate::get(engine)->cache(object->metaObject());
}
+void registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &))
+{
+ MetaObject::registerNotifyPropertyChangeCallBack(callback);
+}
+
ComponentCompleteDisabler::ComponentCompleteDisabler()
{
DesignerSupport::disableComponentComplete();
diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h
index 4fa35d2035..8186802a9d 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h
@@ -127,9 +127,12 @@ public:
} // namespace PropertyChanges
+
bool isSubclassOf(QObject *object, const QByteArray &superTypeName);
void getPropertyCache(QObject *object, QQmlEngine *engine);
+ void registerNotifyPropertyChangeCallBack(void (*callback)(QObject *, const PropertyName &));
+
} // namespace QmlPrivateGate
} // namespace Internal
} // namespace QmlDesigner