diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-09-06 15:10:53 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-09-08 10:36:11 +0000 |
commit | 3485d9775588ebf19d87dcb7fb960a7afe4864c1 (patch) | |
tree | 74f4252270163acae5f3f687d916922883d32ee3 /share/qtcreator/qml/qmlpuppet/qml2puppet | |
parent | a9576256b865111d73cfcb8d8d1e22824e6792db (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.cpp | 32 | ||||
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h | 2 |
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 |