Revert "Revert "QmlDesigner: Fix drag & drop 3D components into 2D/3D view""

This reverts commit 95931b9847.

Reason for revert: fixed conflicts

Change-Id: I96176eb0acb46af657d5c25555e5abe9c0464c5d
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tim Jenssen
2025-06-05 05:28:12 +00:00
parent ce74d6857d
commit 95c8a667c1
6 changed files with 40 additions and 0 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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<QtQuick3D, Object3D>(m_projectStorage, m_typeId);
} else {
return isValid() && isSubclassOf("QtQuick3D.Object3D");
}
}
bool NodeMetaInfo::isQtQuick3DParticles3DAffector3D() const
{
if constexpr (useProjectStorage()) {

View File

@@ -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<QString, QString> 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});
}

View File

@@ -2544,6 +2544,16 @@ NodeMetaInfo Model::qtQuick3DNodeMetaInfo() const
}
}
NodeMetaInfo Model::qtQuick3DObject3DMetaInfo() const
{
if constexpr (useProjectStorage()) {
using namespace Storage::Info;
return createNodeMetaInfo<QtQuick3D, Object3D>();
} else {
return metaInfo("QtQuick3D.Object3D");
}
}
NodeMetaInfo Model::qtQuick3DPointLightMetaInfo() const
{
if constexpr (useProjectStorage()) {

View File

@@ -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<QtQuick3D, ModuleKind::QmlLibrary, Material>,
CacheType<QtQuick3D, ModuleKind::QmlLibrary, Model>,
CacheType<QtQuick3D, ModuleKind::QmlLibrary, Node>,
CacheType<QtQuick3D, ModuleKind::QmlLibrary, Object3D>,
CacheType<QtQuick3D, ModuleKind::QmlLibrary, OrthographicCamera>,
CacheType<QtQuick3D, ModuleKind::QmlLibrary, Pass>,
CacheType<QtQuick3D, ModuleKind::QmlLibrary, PerspectiveCamera>,