From 1d313aae281933c494500c4cded221a43a85ee1d Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Wed, 15 Sep 2010 14:23:00 +0200
Subject: [PATCH] QmlDesigner: add instance meta info

---
 .../qmldesigner/designercore/include/nodeinstance.h       | 1 +
 .../qmldesigner/designercore/include/qmlobjectnode.h      | 1 +
 .../qmldesigner/designercore/instances/nodeinstance.cpp   | 8 ++++++++
 .../designercore/instances/objectnodeinstance.cpp         | 8 ++++++++
 .../designercore/instances/objectnodeinstance.h           | 1 +
 .../qmldesigner/designercore/model/qmlobjectnode.cpp      | 5 +++++
 6 files changed, 24 insertions(+)

diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
index 3c2d41a1cf2..a741f53b693 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
@@ -118,6 +118,7 @@ public:
     double opacity() const;
     QVariant property(const QString &name) const;
     QVariant defaultValue(const QString &name) const;
+    QString instanceType(const QString &name) const;
 
     bool isValid() const;
     void makeInvalid();
diff --git a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
index b8ff11c3632..9bdb53793b4 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlobjectnode.h
@@ -63,6 +63,7 @@ public:
     NodeListProperty nodeListProperty(const QString &name) const;
 
     QVariant instanceValue(const QString &name) const;
+    QString QmlObjectNode::instanceType(const QString &name) const;
 
     bool hasProperty(const QString &name) const;
     bool hasBindingProperty(const QString &name) const;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 3c95bff3396..e0cba857fe7 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -427,6 +427,14 @@ QVariant NodeInstance::defaultValue(const QString &name) const
     return m_nodeInstance->resetValue(name);
 }
 
+/*!
+\brief Returns the type of the property of this NodeInstance.
+*/
+QString NodeInstance::instanceType(const QString &name) const
+{
+    return m_nodeInstance->instanceType(name);
+}
+
 /*!
 \brief Returns if the NodeInstance is valid.
 \returns true if the NodeInstance is valid
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
index e52ca995d7c..fe43cdd5b97 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
@@ -617,6 +617,14 @@ QVariant ObjectNodeInstance::property(const QString &name) const
     return property.read();
 }
 
+QString ObjectNodeInstance::instanceType(const QString &name) const
+{
+    QDeclarativeProperty property(object(), name, context());
+    if (!property.isValid())
+        return QLatin1String("undefined");
+    return property.propertyTypeName();
+}
+
 
 void ObjectNodeInstance::setDeleteHeldInstance(bool deleteInstance)
 {
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
index ef404b1fe7e..982292fb3ca 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
@@ -144,6 +144,7 @@ public:
     virtual QVariant property(const QString &name) const;
     virtual void resetProperty(const QString &name);
     virtual void refreshProperty(const QString &name);
+    virtual QString instanceType(const QString &name) const;
 
     void createDynamicProperty(const QString &name, const QString &typeName);
     void setDeleteHeldInstance(bool deleteInstance);
diff --git a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
index 8fe7a5ac86d..85127ce0823 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlobjectnode.cpp
@@ -387,6 +387,11 @@ QVariant QmlObjectNode::instanceValue(const ModelNode &modelNode, const QString
     return modelView->instanceForModelNode(modelNode).property(name);
 }
 
+QString QmlObjectNode::instanceType(const QString &name) const
+{
+    return nodeInstance().instanceType(name);
+}
+
 NodeInstance QmlObjectNode::nodeInstance() const
 {
     return qmlModelView()->nodeInstanceView()->instanceForNode(modelNode());
-- 
GitLab