aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/edit3d/edit3dview.cpp')
-rw-r--r--src/plugins/qmldesigner/components/edit3d/edit3dview.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp
index f848b58b3f0..fb844b1c858 100644
--- a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp
+++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp
@@ -239,14 +239,25 @@ void Edit3DView::customNotification(const AbstractView *view, const QString &ide
resetPuppet();
}
+/**
+ * @brief get model at position from puppet process
+ *
+ * Response from puppet process for the model at requested position
+ *
+ * @param modelNode 3D model picked at the requested position, invalid node if no model exists
+ */
void Edit3DView::modelAtPosReady(const ModelNode &modelNode)
{
- if (!m_droppedMaterial.isValid() || !modelNode.isValid())
- return;
-
- executeInTransaction(__FUNCTION__, [&] {
- assignMaterialTo3dModel(modelNode, m_droppedMaterial);
- });
+ if (m_modelAtPosReqType == ModelAtPosReqType::ContextMenu) {
+ m_edit3DWidget->showContextMenu(m_contextMenuPos, modelNode);
+ } else if (m_modelAtPosReqType == ModelAtPosReqType::MaterialDrop) {
+ if (m_droppedMaterial.isValid() && modelNode.isValid()) {
+ executeInTransaction(__FUNCTION__, [&] {
+ assignMaterialTo3dModel(modelNode, m_droppedMaterial);
+ });
+ }
+ }
+ m_modelAtPosReqType = ModelAtPosReqType::None;
}
void Edit3DView::sendInputEvent(QInputEvent *e) const
@@ -631,8 +642,17 @@ void Edit3DView::addQuick3DImport()
tr("Could not add QtQuick3D import to project."));
}
+// This method is called upon right-clicking the view to prepare for context-menu creation. The actual
+// context menu is created when modelAtPosReady() is received from puppet
+void Edit3DView::startContextMenu(const QPoint &pos)
+{
+ m_contextMenuPos = pos;
+ m_modelAtPosReqType = ModelAtPosReqType::ContextMenu;
+}
+
void Edit3DView::dropMaterial(const ModelNode &matNode, const QPointF &pos)
{
+ m_modelAtPosReqType = ModelAtPosReqType::MaterialDrop;
m_droppedMaterial = matNode;
QmlDesignerPlugin::instance()->viewManager().nodeInstanceView()->view3DAction({View3DActionCommand::GetModelAtPos, pos});
}