mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-07-17 08:37:17 +02:00
[ui] Paste a node on the mouse's position
When creating a node with a "paste" operation, place the node on the mouse's position in the graph instead of default position (0,0). If the mouse is placed on an existing node, the pasted node will be placed on the mouse's position plus an offset so that the pasted node does not directly overlap with the existing node.
This commit is contained in:
parent
ddda62a652
commit
5b65866e49
4 changed files with 14 additions and 8 deletions
|
@ -396,11 +396,11 @@ class Graph(BaseObject):
|
|||
|
||||
return duplicates
|
||||
|
||||
def pasteNode(self, nodeType, **kwargs):
|
||||
def pasteNode(self, nodeType, position, **kwargs):
|
||||
name = self._createUniqueNodeName(nodeType)
|
||||
node = None
|
||||
with GraphModification(self):
|
||||
node = Node(nodeType, **kwargs)
|
||||
node = Node(nodeType, position=position, **kwargs)
|
||||
self._addNode(node, name)
|
||||
self._applyExpr()
|
||||
return node
|
||||
|
|
|
@ -199,14 +199,15 @@ class PasteNodeCommand(GraphCommand):
|
|||
"""
|
||||
Handle node pasting in a Graph.
|
||||
"""
|
||||
def __init__(self, graph, nodeType, parent=None, **kwargs):
|
||||
def __init__(self, graph, nodeType, position=None, parent=None, **kwargs):
|
||||
super(PasteNodeCommand, self).__init__(graph, parent)
|
||||
self.nodeType = nodeType
|
||||
self.position = position
|
||||
self.nodeName = None
|
||||
self.kwargs = kwargs
|
||||
|
||||
def redoImpl(self):
|
||||
node = self.graph.pasteNode(self.nodeType, **self.kwargs)
|
||||
node = self.graph.pasteNode(self.nodeType, self.position, **self.kwargs)
|
||||
self.nodeName = node.name
|
||||
self.setText("Paste Node {}".format(self.nodeName))
|
||||
return node
|
||||
|
|
|
@ -766,8 +766,8 @@ class UIGraph(QObject):
|
|||
return json.dumps(node, indent=4)
|
||||
return ''
|
||||
|
||||
@Slot(str)
|
||||
def pasteNode(self, clipboardContent):
|
||||
@Slot(str, QPoint)
|
||||
def pasteNode(self, clipboardContent, position=None):
|
||||
"""
|
||||
Parse the content of the clipboard to see whether it contains
|
||||
a valid node description. If that is the case, the node described
|
||||
|
@ -802,7 +802,10 @@ class UIGraph(QObject):
|
|||
attributes.update(d.get("inputs", {}))
|
||||
attributes.update(d.get("outputs", {}))
|
||||
|
||||
self.push(commands.PasteNodeCommand(self._graph, nodeType, **attributes))
|
||||
if isinstance(position, QPoint):
|
||||
position = Position(position.x(), position.y())
|
||||
|
||||
self.push(commands.PasteNodeCommand(self._graph, nodeType, position=position, **attributes))
|
||||
|
||||
undoStack = Property(QObject, lambda self: self._undoStack, constant=True)
|
||||
graphChanged = Signal()
|
||||
|
|
|
@ -41,6 +41,7 @@ Item {
|
|||
clip: true
|
||||
|
||||
SystemPalette { id: activePalette }
|
||||
property point pastePosition
|
||||
|
||||
/// Get node delegate for the given node object
|
||||
function nodeDelegate(node)
|
||||
|
@ -88,8 +89,9 @@ Item {
|
|||
/// Paste content of clipboard to graph editor and create new node if valid
|
||||
function pasteNode()
|
||||
{
|
||||
root.pastePosition = mapToItem(draggable, mouseArea.mouseX, mouseArea.mouseY)
|
||||
var copiedContent = Clipboard.getText()
|
||||
uigraph.pasteNode(copiedContent)
|
||||
uigraph.pasteNode(copiedContent, root.pastePosition)
|
||||
}
|
||||
|
||||
Keys.onPressed: {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue