From 806c8a563d8434613c7c0f2bb07cf73a8648511d Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Thu, 11 Nov 2010 10:46:19 +0100
Subject: [PATCH] QmlObjectValue: Add convenience functionality.

Added
hasLocalProperty()
hasProperty()
keysForEnum()

Reviewed-by: Christian Kamm
---
 src/libs/qmljs/qmljsinterpreter.cpp | 28 ++++++++++++++++++++++++++++
 src/libs/qmljs/qmljsinterpreter.h   |  3 +++
 2 files changed, 31 insertions(+)

diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 78267b72884..47353fe135e 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -963,6 +963,25 @@ bool QmlObjectValue::isPointer(const QString &propertyName) const
     return false;
 }
 
+bool QmlObjectValue::hasLocalProperty(const QString &typeName) const
+{
+    int idx = _metaObject->propertyIndex(typeName);
+    if (idx == -1)
+        return false;
+    return true;
+}
+
+bool QmlObjectValue::hasProperty(const QString &propertyName) const
+{
+    for (const FakeMetaObject *iter = _metaObject; iter; iter = iter->superClass()) {
+        int propIdx = iter->propertyIndex(propertyName);
+        if (propIdx != -1) {
+            return true;
+        }
+    }
+    return false;
+}
+
 bool QmlObjectValue::enumContainsKey(const QString &enumName, const QString &enumKeyName) const
 {
     int idx = _metaObject->enumeratorIndex(enumName);
@@ -976,6 +995,15 @@ bool QmlObjectValue::enumContainsKey(const QString &enumName, const QString &enu
     return false;
 }
 
+QStringList QmlObjectValue::keysForEnum(const QString &enumName) const
+{
+    int idx = _metaObject->enumeratorIndex(enumName);
+    if (idx == -1)
+        return QStringList();
+    const FakeMetaEnum &fme = _metaObject->enumerator(idx);
+    return fme.keys();
+}
+
 // Returns true if this object is in a package or if there is an object that
 // has this one in its prototype chain and is itself in a package.
 bool QmlObjectValue::hasChildInPackage() const
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 04f29e78689..76f0a975228 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -427,7 +427,10 @@ public:
     bool isWritable(const QString &propertyName) const;
     bool isPointer(const QString &propertyName) const;
     bool isEnum(const QString &typeName) const;
+    bool hasLocalProperty(const QString &typeName) const;
+    bool hasProperty(const QString &typeName) const;
     bool enumContainsKey(const QString &enumName, const QString &enumKeyName) const;
+    QStringList keysForEnum(const QString &enumName) const;
     bool hasChildInPackage() const;
 
 protected:
-- 
GitLab