aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp')
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp49
1 files changed, 42 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 4abf7d2802..0efa621e68 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -88,11 +88,17 @@ static TypeName resolveTypeName(const ASTPropertyReference *ref, const ContextPt
if (ref->ast()->propertyToken.isValid()) {
type = ref->ast()->memberType->name.toUtf8();
- if (type == "alias") {
- const Value *value = context->lookupReference(ref);
+ const Value *value = context->lookupReference(ref);
+
+ if (!value)
+ return type;
- if (!value)
- return type;
+ if (const CppComponentValue * componentObjectValue = value->asCppComponentValue()) {
+ type = componentObjectValue->className().toUtf8();
+ dotProperties = getObjectTypes(componentObjectValue, context);
+ }
+
+ if (type == "alias") {
if (const ASTObjectValue * astObjectValue = value->asAstObjectValue()) {
if (astObjectValue->typeName()) {
@@ -336,14 +342,14 @@ private:
static inline bool isValueType(const TypeName &type)
{
static const PropertyTypeList objectValuesList({"QFont", "QPoint", "QPointF",
- "QSize", "QSizeF", "QVector3D", "QVector2D", "font"});
+ "QSize", "QSizeF", "QVector3D", "QVector2D", "vector2d", "vector3d", "font"});
return objectValuesList.contains(type);
}
static inline bool isValueType(const QString &type)
{
static const QStringList objectValuesList({"QFont", "QPoint", "QPointF",
- "QSize", "QSizeF", "QVector3D", "QVector2D", "font"});
+ "QSize", "QSizeF", "QVector3D", "QVector2D", "vector2d", "vector3d", "font"});
return objectValuesList.contains(type);
}
@@ -494,8 +500,31 @@ QVector<PropertyInfo> getObjectTypes(const ObjectValue *objectValue, const Conte
PropertyMemberProcessor processor(context);
objectValue->processMembers(&processor);
+ const auto props = processor.properties();
+
+ for (const PropertyInfo &property : props) {
+ const PropertyName name = property.first;
+ const QString nameAsString = QString::fromUtf8(name);
+
+ if (isValueType(property.second)) {
+ const Value *dotValue = objectValue->lookupMember(nameAsString, context);
+ if (!dotValue)
+ continue;
- propertyList.append(processor.properties());
+ if (const Reference *ref = dotValue->asReference())
+ dotValue = context->lookupReference(ref);
+
+ if (const ObjectValue *dotObjectValue = dotValue->asObjectValue()) {
+ const QVector<PropertyInfo> dotProperties = getObjectTypes(dotObjectValue, context, false, rec + 1);
+ for (const PropertyInfo &propertyInfo : dotProperties) {
+ const PropertyName dotName = name + '.' + propertyInfo.first;
+ const TypeName type = propertyInfo.second;
+ propertyList.append({dotName, type});
+ }
+ }
+ }
+ propertyList.append(property);
+ }
if (!local) {
const ObjectValue* prototype = objectValue->prototype(context);
@@ -1067,6 +1096,12 @@ QVariant::Type NodeMetaInfoPrivate::variantTypeId(const PropertyName &propertyNa
if (typeName == "var")
return QVariant::UserType;
+ if (typeName == "vector2d")
+ return QVariant::Vector2D;
+
+ if (typeName == "vector3d")
+ return QVariant::Vector3D;
+
return QVariant::nameToType(typeName.data());
}