diff --git a/meshroom/ui/qml/GraphEditor/GraphEditor.qml b/meshroom/ui/qml/GraphEditor/GraphEditor.qml index 8d3a0c1e88..2a9df41051 100755 --- a/meshroom/ui/qml/GraphEditor/GraphEditor.qml +++ b/meshroom/ui/qml/GraphEditor/GraphEditor.qml @@ -130,6 +130,9 @@ Item { } } else if (event.key === Qt.Key_D) { duplicateNode(event.modifiers === Qt.AltModifier) + } else if (event.key === Qt.Key_X && event.modifiers === Qt.ControlModifier) { + copyNodes() + uigraph.removeNodes(uigraph.selectedNodes) } else if (event.key === Qt.Key_C && event.modifiers === Qt.ControlModifier) { copyNodes() } else if (event.key === Qt.Key_V && event.modifiers === Qt.ControlModifier) { @@ -476,6 +479,16 @@ Item { onTriggered: Qt.openUrlExternally(Filepath.stringToUrl(nodeMenu.currentNode.internalFolder)) } MenuSeparator {} + MenuItem { + text: "Cut Node(s)" + enabled: true + ToolTip.text: "Copy selection to the clipboard and remove it" + ToolTip.visible: hovered + onTriggered: { + copyNodes() + uigraph.removeNodes(uigraph.selectedNodes) + } + } MenuItem { text: "Copy Node(s)" enabled: true diff --git a/meshroom/ui/qml/main.qml b/meshroom/ui/qml/main.qml index cd34e5d8ba..45041a680c 100644 --- a/meshroom/ui/qml/main.qml +++ b/meshroom/ui/qml/main.qml @@ -521,6 +521,38 @@ ApplicationWindow { enabled: _reconstruction ? _reconstruction.undoStack.canRedo && !_reconstruction.undoStack.lockedRedo : false onTriggered: _reconstruction.undoStack.redo() } + + function getSelectedNodesName() + { + if (!_reconstruction) + return "" + var nodesName = "" + for (var i = 0; i < _reconstruction.selectedNodes.count; i++) + { + if (nodesName !== "") + nodesName += ", " + var node = _reconstruction.selectedNodes.at(i) + nodesName += node.name + } + return nodesName + } + Action { + id: cutAction + + property string tooltip: { + var s = "Copy selected node" + s += (_reconstruction && _reconstruction.selectedNodes.count > 1 ? "s (" : " (") + getSelectedNodesName() + s += ") to the clipboard and remove them from the graph" + return s + } + text: "Cut Node" + (_reconstruction && _reconstruction.selectedNodes.count > 1 ? "s " : " ") + enabled: _reconstruction ? _reconstruction.selectedNodes.count > 0 : false + onTriggered: { + graphEditor.copyNodes() + graphEditor.uigraph.removeNodes(graphEditor.uigraph.selectedNodes) + } + } + Action { id: copyAction @@ -533,21 +565,6 @@ ApplicationWindow { text: "Copy Node" + (_reconstruction && _reconstruction.selectedNodes.count > 1 ? "s " : " ") enabled: _reconstruction ? _reconstruction.selectedNodes.count > 0 : false onTriggered: graphEditor.copyNodes() - - function getSelectedNodesName() - { - if (!_reconstruction) - return "" - var nodesName = "" - for (var i = 0; i < _reconstruction.selectedNodes.count; i++) - { - if (nodesName !== "") - nodesName += ", " - var node = _reconstruction.selectedNodes.at(i) - nodesName += node.name - } - return nodesName - } } Action { @@ -558,6 +575,7 @@ ApplicationWindow { onTriggered: graphEditor.pasteNodes() } + Action { id: loadTemplateAction @@ -794,6 +812,11 @@ ApplicationWindow { ToolTip.visible: hovered ToolTip.text: redoAction.tooltip } + MenuItem { + action: cutAction + ToolTip.visible: hovered + ToolTip.text: cutAction.tooltip + } MenuItem { action: copyAction ToolTip.visible: hovered