aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/qml/qmlpuppet/qml2puppet
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2022-09-06 15:10:53 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2022-09-08 10:36:11 +0000
commit3485d9775588ebf19d87dcb7fb960a7afe4864c1 (patch)
tree74f4252270163acae5f3f687d916922883d32ee3 /share/qtcreator/qml/qmlpuppet/qml2puppet
parenta9576256b865111d73cfcb8d8d1e22824e6792db (diff)
QmlDesigner: Add support any pickable node with 3d view context menu
Previously only 3D models could be picked for context menu target. Now any node that can be resolved from a point at 3D edit view can be picked. Fixes: QDS-7518 Change-Id: Id4a30d96744c42907d45688493776bdff35b934e Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet')
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp32
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h2
2 files changed, 23 insertions, 11 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
index 852572ebf1..24dad5961d 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp
@@ -294,7 +294,7 @@ void Qt5InformationNodeInstanceServer::handleInputEvents()
// Context menu requested
if (command.button() == Qt::RightButton && command.modifiers() == Qt::NoModifier)
- getModelAtPos(command.pos());
+ getNodeAtPos(command.pos());
}
}
@@ -409,7 +409,7 @@ void Qt5InformationNodeInstanceServer::removeRotationBlocks(const QVector<qint32
#endif
}
-void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos)
+void Qt5InformationNodeInstanceServer::getNodeAtPos(const QPointF &pos)
{
#ifdef QUICK3D_MODULE
// pick a Quick3DModel at view position
@@ -421,13 +421,25 @@ void Qt5InformationNodeInstanceServer::getModelAtPos(const QPointF &pos)
QObject *obj = qvariant_cast<QObject *>(editViewProp.read());
QQuick3DViewport *editView = qobject_cast<QQuick3DViewport *>(obj);
- QQuick3DModel *hitModel = helper->pickViewAt(editView, pos.x(), pos.y()).objectHit();
-
- // filter out picks of models created dynamically or inside components
- QQuick3DModel *resolvedPick = qobject_cast<QQuick3DModel *>(helper->resolvePick(hitModel));
+ // Non-model nodes with icon gizmos are also valid results
+ QVariant gizmoVar;
+ QMetaObject::invokeMethod(m_editView3DData.rootItem, "gizmoAt", Qt::DirectConnection,
+ Q_RETURN_ARG(QVariant, gizmoVar),
+ Q_ARG(QVariant, pos.x()),
+ Q_ARG(QVariant, pos.y()));
+ QObject *gizmoObj = qvariant_cast<QObject *>(gizmoVar);
+ QVariant instance = -1;
+
+ if (gizmoObj && hasInstanceForObject(gizmoObj)) {
+ instance = instanceForObject(gizmoObj).instanceId();
+ } else {
+ QQuick3DModel *hitModel = helper->pickViewAt(editView, pos.x(), pos.y()).objectHit();
+ QObject *resolvedPick = helper->resolvePick(hitModel);
+ if (hasInstanceForObject(resolvedPick))
+ instance = instanceForObject(resolvedPick).instanceId();
+ }
- QVariant instance = resolvedPick ? instanceForObject(resolvedPick).instanceId() : -1;
- nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::ModelAtPos, instance});
+ nodeInstanceClient()->handlePuppetToCreatorCommand({PuppetToCreatorCommand::NodeAtPos, instance});
#else
Q_UNUSED(pos)
#endif
@@ -2426,8 +2438,8 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c
break;
#endif
#ifdef QUICK3D_MODULE
- case View3DActionCommand::GetModelAtPos: {
- getModelAtPos(command.value().toPointF());
+ case View3DActionCommand::GetNodeAtPos: {
+ getNodeAtPos(command.value().toPointF());
return;
}
#endif
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
index 87c1d53d54..5758675584 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h
@@ -148,7 +148,7 @@ private:
void updateMaterialPreviewData(const QVector<PropertyValueContainer> &valueChanges);
void updateRotationBlocks(const QVector<PropertyValueContainer> &valueChanges);
void removeRotationBlocks(const QVector<qint32> &instanceIds);
- void getModelAtPos(const QPointF &pos);
+ void getNodeAtPos(const QPointF &pos);
void createAuxiliaryQuickView(const QUrl &url, RenderViewData &viewData);
#ifdef QUICK3D_PARTICLES_MODULE