summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/declarative/qml/qmlobjectscriptclass.cpp23
-rw-r--r--src/declarative/qml/qmlobjectscriptclass_p.h1
-rw-r--r--src/declarative/qml/qmlpropertycache.cpp11
-rw-r--r--src/declarative/qml/qmlpropertycache_p.h1
4 files changed, 36 insertions, 0 deletions
diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp
index 1023579..fbd123a 100644
--- a/src/declarative/qml/qmlobjectscriptclass.cpp
+++ b/src/declarative/qml/qmlobjectscriptclass.cpp
@@ -402,5 +402,28 @@ QScriptValue QmlObjectScriptClass::destroy(QScriptContext *context, QScriptEngin
return engine->nullValue();
}
+QStringList QmlObjectScriptClass::propertyNames(Object *object)
+{
+ QObject *obj = toQObject(object);
+ if (!obj)
+ return QStringList();
+
+ QmlEnginePrivate *enginePrivate = QmlEnginePrivate::get(engine);
+
+ QmlPropertyCache *cache = 0;
+ QmlDeclarativeData *ddata = QmlDeclarativeData::get(obj);
+ if (ddata)
+ cache = ddata->propertyCache;
+ if (!cache) {
+ cache = enginePrivate->cache(obj);
+ if (cache && ddata) { cache->addref(); ddata->propertyCache = cache; }
+ }
+
+ if (!cache)
+ return QStringList();
+
+ return cache->propertyNames();
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlobjectscriptclass_p.h b/src/declarative/qml/qmlobjectscriptclass_p.h
index 5c488db..457eb2b 100644
--- a/src/declarative/qml/qmlobjectscriptclass_p.h
+++ b/src/declarative/qml/qmlobjectscriptclass_p.h
@@ -89,6 +89,7 @@ public:
Value property(QObject *, const Identifier &);
void setProperty(QObject *, const Identifier &name, const QScriptValue &,
QmlContext *evalContext = 0);
+ virtual QStringList propertyNames(Object *);
protected:
virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &,
diff --git a/src/declarative/qml/qmlpropertycache.cpp b/src/declarative/qml/qmlpropertycache.cpp
index 394fa35..3bbf1fe 100644
--- a/src/declarative/qml/qmlpropertycache.cpp
+++ b/src/declarative/qml/qmlpropertycache.cpp
@@ -130,6 +130,8 @@ QmlPropertyCache::Data QmlPropertyCache::create(const QMetaObject *metaObject,
int methodCount = metaObject->methodCount();
for (int ii = methodCount - 1; ii >= 0; --ii) {
QMetaMethod m = metaObject->method(ii);
+ if (m.access() == QMetaMethod::Private)
+ continue;
QString methodName = QString::fromUtf8(m.signature());
int parenIdx = methodName.indexOf(QLatin1Char('('));
@@ -198,6 +200,8 @@ void QmlPropertyCache::append(QmlEngine *engine, const QMetaObject *metaObject,
int methodOffset = metaObject->methodOffset();
for (int ii = methodOffset; ii < methodCount; ++ii) {
QMetaMethod m = metaObject->method(ii);
+ if (m.access() == QMetaMethod::Private)
+ continue;
QString methodName = QString::fromUtf8(m.signature());
int parenIdx = methodName.indexOf(QLatin1Char('('));
@@ -268,6 +272,8 @@ void QmlPropertyCache::update(QmlEngine *engine, const QMetaObject *metaObject)
int methodCount = metaObject->methodCount();
for (int ii = methodCount - 1; ii >= 0; --ii) {
QMetaMethod m = metaObject->method(ii);
+ if (m.access() == QMetaMethod::Private)
+ continue;
QString methodName = QString::fromUtf8(m.signature());
int parenIdx = methodName.indexOf(QLatin1Char('('));
@@ -330,4 +336,9 @@ QString QmlPropertyCache::Data::name(const QMetaObject *metaObject)
}
}
+QStringList QmlPropertyCache::propertyNames() const
+{
+ return stringCache.keys();
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qmlpropertycache_p.h b/src/declarative/qml/qmlpropertycache_p.h
index feaa683..a94b2a1 100644
--- a/src/declarative/qml/qmlpropertycache_p.h
+++ b/src/declarative/qml/qmlpropertycache_p.h
@@ -125,6 +125,7 @@ public:
inline Data *property(const QScriptDeclarativeClass::Identifier &id) const;
Data *property(const QString &) const;
Data *property(int) const;
+ QStringList propertyNames() const;
protected:
virtual void clear();