From f0a3f3bf2fe77ca1a3f7b78257ccbf08617b927f Mon Sep 17 00:00:00 2001 From: Rafal Andrusieczko Date: Fri, 20 Dec 2024 16:49:33 +0100 Subject: [PATCH] Create nodes under the context menu Change-Id: I6f944bf3bda0d706f9678dc918f875d7b5b779ff Reviewed-by: Rafal Andrusieczko --- .../qmldesigner/nodegrapheditor/Main.qml | 15 +++++----- .../imports/Editor/ContextMenu.qml | 30 +++++++++++++------ 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/share/qtcreator/qmldesigner/nodegrapheditor/Main.qml b/share/qtcreator/qmldesigner/nodegrapheditor/Main.qml index 89236f6d1a3..a070b2ab2c1 100644 --- a/share/qtcreator/qmldesigner/nodegrapheditor/Main.qml +++ b/share/qtcreator/qmldesigner/nodegrapheditor/Main.qml @@ -291,17 +291,16 @@ Item { graph.removeSelection(); } } - onRightClicked: function (pos) { + onRightClicked: pos => { if (NodeGraphEditorBackend.nodeGraphEditorModel.currentFileName !== "") { + contextMenu.node = null; var selectedNodes = graphView.graph.selectedNodes; - if (selectedNodes) { - if (selectedNodes.length > 0) - contextMenu.node = selectedNodes.at(0); - else - contextMenu.node = null; - } else - contextMenu.node = null; + if (selectedNodes && selectedNodes.length > 0) { + contextMenu.node = selectedNodes.at(0); + } + const factor = (1.0 / graphView.zoom); + contextMenu.newPosition = Qt.point(-graphView.containerItem.x * factor + pos.x * factor, -graphView.containerItem.y * factor + pos.y * factor); contextMenu.popup(); } } diff --git a/share/qtcreator/qmldesigner/nodegrapheditor/imports/Editor/ContextMenu.qml b/share/qtcreator/qmldesigner/nodegrapheditor/imports/Editor/ContextMenu.qml index 22c242207c8..bc38c7c7a98 100644 --- a/share/qtcreator/qmldesigner/nodegrapheditor/imports/Editor/ContextMenu.qml +++ b/share/qtcreator/qmldesigner/nodegrapheditor/imports/Editor/ContextMenu.qml @@ -15,6 +15,7 @@ StudioControls.Menu { required property var graph property var inputsModel: [] + property point newPosition property var node closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape @@ -30,7 +31,7 @@ StudioControls.Menu { text: qsTr("BaseColor") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.baseColor); + internal.createNode(Nodes.Components.baseColor); } } @@ -38,7 +39,7 @@ StudioControls.Menu { text: qsTr("Metalness") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.metalness); + internal.createNode(Nodes.Components.metalness); } } @@ -46,7 +47,7 @@ StudioControls.Menu { text: qsTr("Roughness") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.roughness); + internal.createNode(Nodes.Components.roughness); } } @@ -54,7 +55,7 @@ StudioControls.Menu { text: qsTr("CheckBox") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.checkBox); + internal.createNode(Nodes.Components.checkBox); } } @@ -62,7 +63,7 @@ StudioControls.Menu { text: qsTr("Color") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.color); + internal.createNode(Nodes.Components.color); } } @@ -70,7 +71,7 @@ StudioControls.Menu { text: qsTr("ComboBox") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.comboBox); + internal.createNode(Nodes.Components.comboBox); } } @@ -78,7 +79,7 @@ StudioControls.Menu { text: qsTr("Material") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.material); + internal.createNode(Nodes.Components.material); } } @@ -86,7 +87,7 @@ StudioControls.Menu { text: qsTr("RealSpinBox") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.realSpinBox); + internal.createNode(Nodes.Components.realSpinBox); } } @@ -94,7 +95,7 @@ StudioControls.Menu { text: qsTr("Texture") onTriggered: () => { - contextMenu.graph.insertNode(Nodes.Components.texture); + internal.createNode(Nodes.Components.texture); } } @@ -125,4 +126,15 @@ StudioControls.Menu { } } } + + QtObject { + id: internal + + function createNode(type) { + const node = contextMenu.graph.insertNode(type); + const nodeItem = node.item; + nodeItem.x = contextMenu.newPosition.x; + nodeItem.y = contextMenu.newPosition.y; + } + } }