diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp index 57a18385766..ce4095e6a58 100644 --- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp +++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.cpp @@ -39,9 +39,9 @@ InstanceContainer::InstanceContainer() { } -InstanceContainer::InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType) +InstanceContainer::InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType,NodeMetaType metaType) : m_instanceId(instanceId), m_type(type), m_majorNumber(majorNumber), m_minorNumber(minorNumber), m_componentPath(componentPath), - m_nodeSource(nodeSource), m_nodeSourceType(nodeSourceType) + m_nodeSource(nodeSource), m_nodeSourceType(nodeSourceType), m_metaType(metaType) { m_type.replace(QLatin1Char('.'), QLatin1Char('/')); } @@ -81,6 +81,11 @@ InstanceContainer::NodeSourceType InstanceContainer::nodeSourceType() const return static_cast(m_nodeSourceType); } +InstanceContainer::NodeMetaType InstanceContainer::metaType() const +{ + return static_cast(m_metaType); +} + QDataStream &operator<<(QDataStream &out, const InstanceContainer &container) { out << container.instanceId(); @@ -90,6 +95,7 @@ QDataStream &operator<<(QDataStream &out, const InstanceContainer &container) out << container.componentPath(); out << container.nodeSource(); out << container.nodeSourceType(); + out << container.metaType(); return out; } @@ -104,6 +110,7 @@ QDataStream &operator>>(QDataStream &in, InstanceContainer &container) in >> container.m_componentPath; in >> container.m_nodeSource; in >> container.m_nodeSourceType; + in >> container.m_metaType; return in; } diff --git a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h index b80bec5d398..25835c1ee94 100644 --- a/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h +++ b/share/qtcreator/qml/qmlpuppet/container/instancecontainer.h @@ -54,8 +54,13 @@ public: ComponentSource = 2 }; + enum NodeMetaType { + ObjectMetaType, + ItemMetaType + }; + InstanceContainer(); - InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType); + InstanceContainer(qint32 instanceId, const QString &type, int majorNumber, int minorNumber, const QString &componentPath, const QString &nodeSource, NodeSourceType nodeSourceType, NodeMetaType metaType); qint32 instanceId() const; QString type() const; @@ -64,6 +69,7 @@ public: QString componentPath() const; QString nodeSource() const; NodeSourceType nodeSourceType() const; + NodeMetaType metaType() const; private: qint32 m_instanceId; @@ -73,6 +79,7 @@ private: QString m_componentPath; QString m_nodeSource; qint32 m_nodeSourceType; + qint32 m_metaType; }; } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/instances/servernodeinstance.cpp index 63434ad2ffb..73a2c9f2700 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/servernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/instances/servernodeinstance.cpp @@ -218,6 +218,13 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe object = Internal::ObjectNodeInstance::createPrimitive(instanceContainer.type(), instanceContainer.majorNumber(), instanceContainer.minorNumber(), nodeInstanceServer->context()); } + if ((object == 0) && (instanceContainer.metaType() == InstanceContainer::ItemMetaType)) //If we cannot instanciate the object but we know it has to be an Ttem, we create an Item instead. +#if QT_VERSION >= 0x050000 + object = Internal::ObjectNodeInstance::createPrimitive("QSGItem", 2, 0, nodeInstanceServer->context()) +#else + object = Internal::ObjectNodeInstance::createPrimitive("QDeclarativeItem", 2, 0, nodeInstanceServer->context()); +#endif + ServerNodeInstance instance(createInstance(object)); instance.internalInstance()->setNodeInstanceServer(nodeInstanceServer); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index eeb80734213..8417c368911 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -766,13 +766,19 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand() QVector instanceContainerList; foreach(const NodeInstance &instance, instanceList) { InstanceContainer::NodeSourceType nodeSourceType = static_cast(instance.modelNode().nodeSourceType()); + + InstanceContainer::NodeMetaType nodeMetaType = nodeMetaType = InstanceContainer::ObjectMetaType; + if (instance.modelNode().metaInfo().isSubclassOf("QtQuick.Item", -1, -1)) + nodeMetaType = InstanceContainer::ItemMetaType; + InstanceContainer container(instance.instanceId(), instance.modelNode().type(), instance.modelNode().majorVersion(), instance.modelNode().minorVersion(), instance.modelNode().metaInfo().componentFileName(), instance.modelNode().nodeSource(), - nodeSourceType + nodeSourceType, + nodeMetaType ); instanceContainerList.append(container); @@ -862,8 +868,13 @@ CreateInstancesCommand NodeInstanceView::createCreateInstancesCommand(const QLis QVector containerList; foreach(const NodeInstance &instance, instanceList) { InstanceContainer::NodeSourceType nodeSourceType = static_cast(instance.modelNode().nodeSourceType()); + + InstanceContainer::NodeMetaType nodeMetaType = nodeMetaType = InstanceContainer::ObjectMetaType; + if (instance.modelNode().metaInfo().isSubclassOf("QtQuick.Item", -1, -1)) + nodeMetaType = InstanceContainer::ItemMetaType; + InstanceContainer container(instance.instanceId(), instance.modelNode().type(), instance.modelNode().majorVersion(), instance.modelNode().minorVersion(), - instance.modelNode().metaInfo().componentFileName(), instance.modelNode().nodeSource(), nodeSourceType); + instance.modelNode().metaInfo().componentFileName(), instance.modelNode().nodeSource(), nodeSourceType, nodeMetaType); containerList.append(container); }