diff --git a/src/plugins/qmldesigner/libs/designercore/include/model.h b/src/plugins/qmldesigner/libs/designercore/include/model.h index 9c8bcd10827..3771ba00689 100644 --- a/src/plugins/qmldesigner/libs/designercore/include/model.h +++ b/src/plugins/qmldesigner/libs/designercore/include/model.h @@ -173,6 +173,7 @@ public: NodeMetaInfo qtQuick3DMaterialMetaInfo() const; NodeMetaInfo qtQuick3DModelMetaInfo() const; NodeMetaInfo qtQuick3DNodeMetaInfo() const; + NodeMetaInfo qtQuick3DObject3DMetaInfo() const; NodeMetaInfo qtQuick3DOrthographicCameraMetaInfo() const; NodeMetaInfo qtQuick3DParticles3DSpriteParticle3DMetaInfo() const; NodeMetaInfo qtQuick3DPerspectiveCameraMetaInfo() const; diff --git a/src/plugins/qmldesigner/libs/designercore/include/nodemetainfo.h b/src/plugins/qmldesigner/libs/designercore/include/nodemetainfo.h index fa867cce033..4e3387cf5ce 100644 --- a/src/plugins/qmldesigner/libs/designercore/include/nodemetainfo.h +++ b/src/plugins/qmldesigner/libs/designercore/include/nodemetainfo.h @@ -191,6 +191,7 @@ public: bool isQtQuick3DMaterial() const; bool isQtQuick3DModel() const; bool isQtQuick3DNode() const; + bool isQtQuick3DObject3D() const; bool isQtQuick3DParticlesAbstractShape() const; bool isQtQuick3DParticles3DAffector3D() const; bool isQtQuick3DParticles3DAttractor3D() const; diff --git a/src/plugins/qmldesigner/libs/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/libs/designercore/metainfo/nodemetainfo.cpp index b0320704fc9..fc789eb7904 100644 --- a/src/plugins/qmldesigner/libs/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/libs/designercore/metainfo/nodemetainfo.cpp @@ -4156,6 +4156,22 @@ bool NodeMetaInfo::isQtQuick3DNode() const } } +bool NodeMetaInfo::isQtQuick3DObject3D() const +{ + if constexpr (useProjectStorage()) { + if (!isValid()) + return false; + + using NanotraceHR::keyValue; + NanotraceHR::Tracer tracer{"is QtQuick3D.Object3D", category(), keyValue("type id", m_typeId)}; + + using namespace Storage::Info; + return isBasedOnCommonType(m_projectStorage, m_typeId); + } else { + return isValid() && isSubclassOf("QtQuick3D.Object3D"); + } +} + bool NodeMetaInfo::isQtQuick3DParticles3DAffector3D() const { if constexpr (useProjectStorage()) { diff --git a/src/plugins/qmldesigner/libs/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/libs/designercore/metainfo/subcomponentmanager.cpp index 82ea48900aa..51571429e2e 100644 --- a/src/plugins/qmldesigner/libs/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/libs/designercore/metainfo/subcomponentmanager.cpp @@ -372,6 +372,16 @@ void SubComponentManager::registerQmlFile(const QFileInfo &fileInfo, const QStri if (!qualifier.isEmpty()) itemLibraryEntry.setRequiredImport(fixedQualifier); + const NodeMetaInfo nodeMetaInfo = model()->metaInfo(baseComponentName.toUtf8()); + if (nodeMetaInfo.isValid()) { + QHash hints; + if (nodeMetaInfo.isBasedOn(model()->qtQuick3DObject3DMetaInfo())) + hints["canBeDroppedInFormEditor"] = "false"; + if (nodeMetaInfo.isBasedOn(model()->qtQuick3DNodeMetaInfo())) + hints["canBeDroppedInView3D"] = "true"; + itemLibraryEntry.addHints(hints); + } + if (!model()->metaInfo().itemLibraryInfo()->containsEntry(itemLibraryEntry)) model()->metaInfo().itemLibraryInfo()->addEntries({itemLibraryEntry}); } diff --git a/src/plugins/qmldesigner/libs/designercore/model/model.cpp b/src/plugins/qmldesigner/libs/designercore/model/model.cpp index eac261eca8c..2d2c9cbebc6 100644 --- a/src/plugins/qmldesigner/libs/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/libs/designercore/model/model.cpp @@ -2544,6 +2544,16 @@ NodeMetaInfo Model::qtQuick3DNodeMetaInfo() const } } +NodeMetaInfo Model::qtQuick3DObject3DMetaInfo() const +{ + if constexpr (useProjectStorage()) { + using namespace Storage::Info; + return createNodeMetaInfo(); + } else { + return metaInfo("QtQuick3D.Object3D"); + } +} + NodeMetaInfo Model::qtQuick3DPointLightMetaInfo() const { if constexpr (useProjectStorage()) { diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/commontypecache.h b/src/plugins/qmldesigner/libs/designercore/projectstorage/commontypecache.h index c979052a676..a69251db2fe 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/commontypecache.h +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/commontypecache.h @@ -71,6 +71,7 @@ inline constexpr char Material[] = "Material"; inline constexpr char Model[] = "Model"; inline constexpr char MouseArea[] = "MouseArea"; inline constexpr char Node[] = "Node"; +inline constexpr char Object3D[] = "Object3D"; inline constexpr char OrthographicCamera[] = "OrthographicCamera"; inline constexpr char Particle3D[] = "Particle3D"; inline constexpr char ParticleEmitter3D[] = "ParticleEmitter3D"; @@ -223,6 +224,7 @@ class CommonTypeCache CacheType, CacheType, CacheType, + CacheType, CacheType, CacheType, CacheType,