45void QQuickDesignerSupportProperties::doResetProperty(QObject *object, QQmlContext *context,
const QQuickDesignerSupport::PropertyName &propertyName)
47 QQuickDesignerCustomObjectData::doResetProperty(object, context, propertyName);
55bool QQuickDesignerSupportProperties::hasBindingForProperty(QObject *object,
57 const QQuickDesignerSupport::PropertyName &propertyName,
60 return QQuickDesignerCustomObjectData::hasBindingForProperty(object, context, propertyName, hasChanged);
63void QQuickDesignerSupportProperties::setPropertyBinding(QObject *object,
65 const QQuickDesignerSupport::PropertyName &propertyName,
66 const QString &expression)
68 QQuickDesignerCustomObjectData::setPropertyBinding(object, context, propertyName, expression);
71void QQuickDesignerSupportProperties::keepBindingFromGettingDeleted(QObject *object,
73 const QQuickDesignerSupport::PropertyName &propertyName)
75 QQuickDesignerCustomObjectData::keepBindingFromGettingDeleted(object, context, propertyName);
95 const QQuickDesignerSupport::PropertyName &baseName,
96 QObjectList *inspectedObjects,
99 QQuickDesignerSupport::PropertyNameList propertyNameList;
102 return propertyNameList;
104 if (!inspectedObjects->contains(object))
105 inspectedObjects->append(object);
107 const QMetaObject *metaObject = object->metaObject();
108 for (
int index = 0; index < metaObject->propertyCount(); ++index) {
109 QMetaProperty metaProperty = metaObject->property(index);
110 QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name()));
111 if (declarativeProperty.isValid() && !declarativeProperty.isWritable() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) {
112 if (declarativeProperty.name() != QLatin1String(
"parent")) {
113 QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read());
115 propertyNameList.append(propertyNameListForWritableProperties(childObject,
116 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name())
117 +
'.', inspectedObjects,
120 }
else if (QQmlGadgetPtrWrapper *valueType
121 = QQmlGadgetPtrWrapper::instance(qmlEngine(object), metaProperty.metaType())) {
122 valueType->setValue(metaProperty.read(object));
123 propertyNameList.append(propertyNameListForWritableProperties(valueType,
124 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name())
125 +
'.', inspectedObjects,
129 if (metaProperty.isReadable() && metaProperty.isWritable()) {
130 addToPropertyNameListIfNotBlackListed(&propertyNameList,
131 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name()));
135 return propertyNameList;
138QQuickDesignerSupport::PropertyNameList QQuickDesignerSupportProperties::propertyNameListForWritableProperties(QObject *object)
140 QObjectList localObjectList;
141 return ::propertyNameListForWritableProperties(object, {}, &localObjectList);
155QQuickDesignerSupport::PropertyNameList QQuickDesignerSupportProperties::allPropertyNames(QObject *object,
156 const QQuickDesignerSupport::PropertyName &baseName,
157 QObjectList *inspectedObjects,
160 QQuickDesignerSupport::PropertyNameList propertyNameList;
162 QObjectList localObjectList;
164 if (inspectedObjects ==
nullptr)
165 inspectedObjects = &localObjectList;
168 return propertyNameList;
170 if (!inspectedObjects->contains(object))
171 inspectedObjects->append(object);
173 const QMetaObject *metaObject = object->metaObject();
175 QStringList deferredPropertyNames;
176 const int namesIndex = metaObject->indexOfClassInfo(
"DeferredPropertyNames");
177 if (namesIndex != -1) {
178 QMetaClassInfo classInfo = metaObject->classInfo(namesIndex);
179 deferredPropertyNames = QString::fromUtf8(classInfo.value()).split(QLatin1Char(
','));
182 for (
int index = 0; index < metaObject->propertyCount(); ++index) {
183 QMetaProperty metaProperty = metaObject->property(index);
184 QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name()));
185 if (declarativeProperty.isValid() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) {
186 if (declarativeProperty.name() != QLatin1String(
"parent")
187 && !deferredPropertyNames.contains(declarativeProperty.name())) {
188 QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read());
190 propertyNameList.append(allPropertyNames(childObject,
192 + QQuickDesignerSupport::PropertyName(metaProperty.name())
193 +
'.', inspectedObjects,
196 }
else if (QQmlGadgetPtrWrapper *valueType
197 = QQmlGadgetPtrWrapper::instance(qmlEngine(object), metaProperty.metaType())) {
198 valueType->setValue(metaProperty.read(object));
199 propertyNameList.append(baseName + QQuickDesignerSupport::PropertyName(metaProperty.name()));
200 propertyNameList.append(allPropertyNames(valueType,
202 + QQuickDesignerSupport::PropertyName(metaProperty.name())
203 +
'.', inspectedObjects,
206 addToPropertyNameListIfNotBlackListed(&propertyNameList,
207 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name()));
211 return propertyNameList;