QmlDesigner.instances: allow fallback to item

If we know from the (text editor) meta system that an object is an
(visible) item, we always create an item as fallback.

We might not be able to instaciate the original item.

Change-Id: I6851cd7a8de68d9d09b789927c204f0617017de7
Reviewed-on: http://codereview.qt.nokia.com/829
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Marco Bubke <marco.bubke@nokia.com>
This commit is contained in:
Thomas Hartmann
2011-06-28 13:24:18 +02:00
committed by Marco Bubke
parent 5d87d4c49b
commit 08e4b339f1
4 changed files with 37 additions and 5 deletions

View File

@@ -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_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('/')); m_type.replace(QLatin1Char('.'), QLatin1Char('/'));
} }
@@ -81,6 +81,11 @@ InstanceContainer::NodeSourceType InstanceContainer::nodeSourceType() const
return static_cast<NodeSourceType>(m_nodeSourceType); return static_cast<NodeSourceType>(m_nodeSourceType);
} }
InstanceContainer::NodeMetaType InstanceContainer::metaType() const
{
return static_cast<NodeMetaType>(m_metaType);
}
QDataStream &operator<<(QDataStream &out, const InstanceContainer &container) QDataStream &operator<<(QDataStream &out, const InstanceContainer &container)
{ {
out << container.instanceId(); out << container.instanceId();
@@ -90,6 +95,7 @@ QDataStream &operator<<(QDataStream &out, const InstanceContainer &container)
out << container.componentPath(); out << container.componentPath();
out << container.nodeSource(); out << container.nodeSource();
out << container.nodeSourceType(); out << container.nodeSourceType();
out << container.metaType();
return out; return out;
} }
@@ -104,6 +110,7 @@ QDataStream &operator>>(QDataStream &in, InstanceContainer &container)
in >> container.m_componentPath; in >> container.m_componentPath;
in >> container.m_nodeSource; in >> container.m_nodeSource;
in >> container.m_nodeSourceType; in >> container.m_nodeSourceType;
in >> container.m_metaType;
return in; return in;
} }

View File

@@ -54,8 +54,13 @@ public:
ComponentSource = 2 ComponentSource = 2
}; };
enum NodeMetaType {
ObjectMetaType,
ItemMetaType
};
InstanceContainer(); 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; qint32 instanceId() const;
QString type() const; QString type() const;
@@ -64,6 +69,7 @@ public:
QString componentPath() const; QString componentPath() const;
QString nodeSource() const; QString nodeSource() const;
NodeSourceType nodeSourceType() const; NodeSourceType nodeSourceType() const;
NodeMetaType metaType() const;
private: private:
qint32 m_instanceId; qint32 m_instanceId;
@@ -73,6 +79,7 @@ private:
QString m_componentPath; QString m_componentPath;
QString m_nodeSource; QString m_nodeSource;
qint32 m_nodeSourceType; qint32 m_nodeSourceType;
qint32 m_metaType;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -218,6 +218,13 @@ ServerNodeInstance ServerNodeInstance::create(NodeInstanceServer *nodeInstanceSe
object = Internal::ObjectNodeInstance::createPrimitive(instanceContainer.type(), instanceContainer.majorNumber(), instanceContainer.minorNumber(), nodeInstanceServer->context()); 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)); ServerNodeInstance instance(createInstance(object));
instance.internalInstance()->setNodeInstanceServer(nodeInstanceServer); instance.internalInstance()->setNodeInstanceServer(nodeInstanceServer);

View File

@@ -766,13 +766,19 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
QVector<InstanceContainer> instanceContainerList; QVector<InstanceContainer> instanceContainerList;
foreach(const NodeInstance &instance, instanceList) { foreach(const NodeInstance &instance, instanceList) {
InstanceContainer::NodeSourceType nodeSourceType = static_cast<InstanceContainer::NodeSourceType>(instance.modelNode().nodeSourceType()); InstanceContainer::NodeSourceType nodeSourceType = static_cast<InstanceContainer::NodeSourceType>(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(), InstanceContainer container(instance.instanceId(),
instance.modelNode().type(), instance.modelNode().type(),
instance.modelNode().majorVersion(), instance.modelNode().majorVersion(),
instance.modelNode().minorVersion(), instance.modelNode().minorVersion(),
instance.modelNode().metaInfo().componentFileName(), instance.modelNode().metaInfo().componentFileName(),
instance.modelNode().nodeSource(), instance.modelNode().nodeSource(),
nodeSourceType nodeSourceType,
nodeMetaType
); );
instanceContainerList.append(container); instanceContainerList.append(container);
@@ -862,8 +868,13 @@ CreateInstancesCommand NodeInstanceView::createCreateInstancesCommand(const QLis
QVector<InstanceContainer> containerList; QVector<InstanceContainer> containerList;
foreach(const NodeInstance &instance, instanceList) { foreach(const NodeInstance &instance, instanceList) {
InstanceContainer::NodeSourceType nodeSourceType = static_cast<InstanceContainer::NodeSourceType>(instance.modelNode().nodeSourceType()); InstanceContainer::NodeSourceType nodeSourceType = static_cast<InstanceContainer::NodeSourceType>(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(), 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); containerList.append(container);
} }