44void QQuickDesignerSupportProperties::doResetProperty(QObject *object, QQmlContext *context,
const QQuickDesignerSupport::PropertyName &propertyName)
46 QQuickDesignerCustomObjectData::doResetProperty(object, context, propertyName);
54bool QQuickDesignerSupportProperties::hasBindingForProperty(QObject *object,
56 const QQuickDesignerSupport::PropertyName &propertyName,
59 return QQuickDesignerCustomObjectData::hasBindingForProperty(object, context, propertyName, hasChanged);
62void QQuickDesignerSupportProperties::setPropertyBinding(QObject *object,
64 const QQuickDesignerSupport::PropertyName &propertyName,
65 const QString &expression)
67 QQuickDesignerCustomObjectData::setPropertyBinding(object, context, propertyName, expression);
70void QQuickDesignerSupportProperties::keepBindingFromGettingDeleted(QObject *object,
72 const QQuickDesignerSupport::PropertyName &propertyName)
74 QQuickDesignerCustomObjectData::keepBindingFromGettingDeleted(object, context, propertyName);
94 const QQuickDesignerSupport::PropertyName &baseName,
95 QObjectList *inspectedObjects,
98 QQuickDesignerSupport::PropertyNameList propertyNameList;
101 return propertyNameList;
103 if (!inspectedObjects->contains(object))
104 inspectedObjects->append(object);
106 const QMetaObject *metaObject = object->metaObject();
107 for (
int index = 0; index < metaObject->propertyCount(); ++index) {
108 QMetaProperty metaProperty = metaObject->property(index);
109 QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name()));
110 if (declarativeProperty.isValid() && !declarativeProperty.isWritable() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) {
111 if (declarativeProperty.name() != QLatin1String(
"parent")) {
112 QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read());
114 propertyNameList.append(propertyNameListForWritableProperties(childObject,
115 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name())
116 +
'.', inspectedObjects,
119 }
else if (QQmlGadgetPtrWrapper *valueType
120 = QQmlGadgetPtrWrapper::instance(qmlEngine(object), metaProperty.metaType())) {
121 valueType->setValue(metaProperty.read(object));
122 propertyNameList.append(propertyNameListForWritableProperties(valueType,
123 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name())
124 +
'.', inspectedObjects,
128 if (metaProperty.isReadable() && metaProperty.isWritable()) {
129 addToPropertyNameListIfNotBlackListed(&propertyNameList,
130 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name()));
134 return propertyNameList;
137QQuickDesignerSupport::PropertyNameList QQuickDesignerSupportProperties::propertyNameListForWritableProperties(QObject *object)
139 QObjectList localObjectList;
140 return ::propertyNameListForWritableProperties(object, {}, &localObjectList);
154QQuickDesignerSupport::PropertyNameList QQuickDesignerSupportProperties::allPropertyNames(QObject *object,
155 const QQuickDesignerSupport::PropertyName &baseName,
156 QObjectList *inspectedObjects,
159 QQuickDesignerSupport::PropertyNameList propertyNameList;
161 QObjectList localObjectList;
163 if (inspectedObjects ==
nullptr)
164 inspectedObjects = &localObjectList;
167 return propertyNameList;
169 if (!inspectedObjects->contains(object))
170 inspectedObjects->append(object);
172 const QMetaObject *metaObject = object->metaObject();
174 QStringList deferredPropertyNames;
175 const int namesIndex = metaObject->indexOfClassInfo(
"DeferredPropertyNames");
176 if (namesIndex != -1) {
177 QMetaClassInfo classInfo = metaObject->classInfo(namesIndex);
178 deferredPropertyNames = QString::fromUtf8(classInfo.value()).split(QLatin1Char(
','));
181 for (
int index = 0; index < metaObject->propertyCount(); ++index) {
182 QMetaProperty metaProperty = metaObject->property(index);
183 QQmlProperty declarativeProperty(object, QString::fromUtf8(metaProperty.name()));
184 if (declarativeProperty.isValid() && declarativeProperty.propertyTypeCategory() == QQmlProperty::Object) {
185 if (declarativeProperty.name() != QLatin1String(
"parent")
186 && !deferredPropertyNames.contains(declarativeProperty.name())) {
187 QObject *childObject = QQmlMetaType::toQObject(declarativeProperty.read());
189 propertyNameList.append(allPropertyNames(childObject,
191 + QQuickDesignerSupport::PropertyName(metaProperty.name())
192 +
'.', inspectedObjects,
195 }
else if (QQmlGadgetPtrWrapper *valueType
196 = QQmlGadgetPtrWrapper::instance(qmlEngine(object), metaProperty.metaType())) {
197 valueType->setValue(metaProperty.read(object));
198 propertyNameList.append(baseName + QQuickDesignerSupport::PropertyName(metaProperty.name()));
199 propertyNameList.append(allPropertyNames(valueType,
201 + QQuickDesignerSupport::PropertyName(metaProperty.name())
202 +
'.', inspectedObjects,
205 addToPropertyNameListIfNotBlackListed(&propertyNameList,
206 baseName + QQuickDesignerSupport::PropertyName(metaProperty.name()));
210 return propertyNameList;