diff options
author | Thomas Hartmann <[email protected]> | 2015-07-22 16:25:17 +0200 |
---|---|---|
committer | Simon Hausmann <[email protected]> | 2015-07-22 18:39:44 +0000 |
commit | 217747f833a962aa4d6f4247bb954a5259b859de (patch) | |
tree | dfa324d7d402ce6037063457e2f3f6a61da6fc92 /src/quick/designer/qquickdesignersupportproperties.cpp | |
parent | a4498f155085ab47d3c7a81ab318d9be7bb7fad3 (diff) |
Implmementing missing function of QQuickDesignerSupportProperties
Change-Id: Iafeda8755df80fdc2329ef778aa563eb0636ef40
Reviewed-by: Tim Jenssen <[email protected]>
Diffstat (limited to 'src/quick/designer/qquickdesignersupportproperties.cpp')
-rw-r--r-- | src/quick/designer/qquickdesignersupportproperties.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/quick/designer/qquickdesignersupportproperties.cpp b/src/quick/designer/qquickdesignersupportproperties.cpp index 173d61213a..e471b0ef72 100644 --- a/src/quick/designer/qquickdesignersupportproperties.cpp +++ b/src/quick/designer/qquickdesignersupportproperties.cpp @@ -177,6 +177,55 @@ bool QQuickDesignerSupportProperties::isPropertyBlackListed(const QQuickDesigner return false; } +QQuickDesignerSupport::PropertyNameList QQuickDesignerSupportProperties::allPropertyNames(QObject *object, + const QQuickDesignerSupport::PropertyName &baseName, + QObjectList *inspectedObjects) +{ + QQuickDesignerSupport::PropertyNameList propertyNameList; + + QObjectList localObjectList; + + if (inspectedObjects == 0) + inspectedObjects = &localObjectList; + + + if (inspectedObjects->contains(object)) + return propertyNameList; + + inspectedObjects->append(object); + + + const QMetaObject *metaObject = object->metaObject(); + for (int index = 0; index < metaObject->propertyCount(); ++index) { + QMetaProperty metaProperty = metaObject->property(index); + QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name())); + if (declarativeProperty.isValid() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) { + if (declarativeProperty.name() != "parent") { + QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read()); + if (childObject) + propertyNameList.append(allPropertyNames(childObject, + baseName + + QQuickDesignerSupport::PropertyName(metaProperty.name()) + + '.', inspectedObjects)); + } + } else if (QQmlValueTypeFactory::valueType(metaProperty.userType())) { + QQmlValueType *valueType = QQmlValueTypeFactory::valueType(metaProperty.userType()); + valueType->setValue(metaProperty.read(object)); + propertyNameList.append(baseName + QQuickDesignerSupport::PropertyName(metaProperty.name())); + propertyNameList.append(allPropertyNames(valueType, + baseName + + QQuickDesignerSupport::PropertyName(metaProperty.name()) + + '.', inspectedObjects)); + } else { + addToPropertyNameListIfNotBlackListed(&propertyNameList, + baseName + QQuickDesignerSupport::PropertyName(metaProperty.name())); + } + } + + return propertyNameList; +} + + QT_END_NAMESPACE |