diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h index df3d38494f22ec6201ed48253277ddb7db55f32c..20c13cab39f57db8740a8186376a07ab4f2c4119 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h @@ -141,6 +141,8 @@ public: static void registerDeclarativeTypes(); + void doComponentComplete(); + QString id() const; #ifdef QTCREATOR_TEST diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp index 88c1306f12f19c158abeada709d992027ca281b6..03a60e030207bb83fb219d7dc94c7cd292be307c 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp @@ -644,6 +644,11 @@ void NodeInstance::registerDeclarativeTypes() // qmlRegisterType<QmlDesigner::Internal::QmlPropertyChangesObject>(); } +void NodeInstance::doComponentComplete() +{ + +} + QString NodeInstance::id() const { return m_nodeInstance->id(); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 1ae3e051f5521a41d17ee8b75bae480766575c60..ae86167545829fe48246b6eb9b9a3b90ac0d4a60 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -140,7 +140,10 @@ void NodeInstanceView::modelAboutToBeDetached(Model * model) */ void NodeInstanceView::nodeCreated(const ModelNode &createdNode) { - loadNode(createdNode); + NodeInstance instance = loadNode(createdNode); + + if (instance.isValid()) + instance.doComponentComplete(); } /*! \brief Notifing the view that a node was created. @@ -401,6 +404,9 @@ void NodeInstanceView::loadNodes(const QList<ModelNode> &nodeList) foreach (const BindingProperty &property, node.bindingProperties()) instanceForNode(node).setPropertyBinding(property.name(), property.expression()); } + + foreach(NodeInstance instance, m_objectInstanceHash.values()) + instance.doComponentComplete(); } // TODO: Set base state as current model state diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp index e282c27d897765a4e889077c07c4e3550ebad1d7..4074d8dc72558b3c974b9d842b471d59521ab384 100644 --- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp @@ -381,6 +381,9 @@ void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldPare nodeInstanceView()->instanceForObject(oldParent).resetProperty(oldParentProperty); } } + + if (object && object->parent()) + object->setParent(0); } void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty) @@ -400,6 +403,11 @@ void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, c property.write(objectToVariant(object)); } + QGraphicsObject *graphicsObject = qobject_cast<QGraphicsObject*>(object); + + if (object && !(graphicsObject && graphicsObject->parentItem())) + object->setParent(newParent); + Q_ASSERT(objectToVariant(object).isValid()); } @@ -972,6 +980,11 @@ NodeInstance ObjectNodeInstance::nodeInstanceParentForObject(QObject *currentObj return nodeInstanceParentForObject(parentObject); } +void ObjectNodeInstance::doComponentComplete() +{ + +} + } } diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h index 4bb43e330e3c41921dbe1acc25cfd38d7bf25858..20718b3a9a1841307ecfcd74211f9a5deaef2022 100644 --- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h +++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h @@ -179,6 +179,9 @@ public: NodeInstance nodeInstanceParentForObject(QObject *currentObject) const; + + virtual void doComponentComplete(); + protected: static QObject *createInstance(const NodeMetaInfo &metaInfo, QDeclarativeContext *parentContext); diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp index a5fbac695d232a0dcd82ce5ca51a3e0b7231d38f..71c911f0df68fdfa9b860de87d28eff4feeb1596 100644 --- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp @@ -286,6 +286,12 @@ void QmlGraphicsItemNodeInstance::resetVertical() setPropertyVariant("height", qmlGraphicsItem()->implicitHeight()); } +void QmlGraphicsItemNodeInstance::doComponentComplete() +{ + if (qmlGraphicsItem()) + static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem())->componentComplete(); +} + int QmlGraphicsItemNodeInstance::penWidth() const { QDeclarativeRectangle *rectangle = qobject_cast<QDeclarativeRectangle*>(object()); @@ -337,6 +343,11 @@ void QmlGraphicsItemNodeInstance::resetProperty(const QString &name) } } +void QmlGraphicsItemNodeInstance::reparent(const NodeInstance &oldParentInstance, const QString &oldParentProperty, const NodeInstance &newParentInstance, const QString &newParentProperty) +{ + GraphicsObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty); +} + //void QmlGraphicsItemNodeInstance::updateAnchors() //{ // NodeAnchors anchors(modelNode()); diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h index 43eeb4a6ba6dcb4a5ca099f1859e34e5e9fe1918..96db456ab9809db9f5f5cfb35f6160ce1abf7b9f 100644 --- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h +++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h @@ -60,19 +60,22 @@ public: QVariant property(const QString &name) const; void resetProperty(const QString &name); + void reparent(const NodeInstance &oldParentInstance, const QString &oldParentProperty, const NodeInstance &newParentInstance, const QString &newParentProperty); + int penWidth() const; bool hasAnchor(const QString &name) const; QPair<QString, NodeInstance> anchor(const QString &name) const; bool isAnchoredBySibling() const; bool isAnchoredByChildren() const; + void doComponentComplete(); protected: QmlGraphicsItemNodeInstance(QDeclarativeItem *item, bool hasContent); QDeclarativeItem *qmlGraphicsItem() const; QDeclarativeAnchors *anchors() const; void resetHorizontal(); - void resetVertical(); + void resetVertical(); private: //variables bool m_hasHeight;