diff options
author | Thomas Hartmann <Thomas.Hartmann@theqtcompany.com> | 2015-05-21 11:47:27 +0200 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2015-05-21 10:11:48 +0000 |
commit | c9eb75e2f889ec7c662d196597b60537855e46b1 (patch) | |
tree | 08447b9499038b322a6a8a05dbda8b208ef7a1ab /share | |
parent | 0321f6e1a73cc5a032f578754494aab0582ae946 (diff) | |
download | qt-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')
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 &) = ¬ifyPropertyChangeCallBackFunction; + 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 |