[ui] GraphEditor: select duplicated nodes and select following nodes on alt + left click

This commit is contained in:
ChemicalXandco 2021-04-14 23:14:51 +01:00
parent 55b16bc6d3
commit e8a5491178
2 changed files with 23 additions and 6 deletions

View file

@ -662,6 +662,17 @@ class UIGraph(QObject):
def removeAttribute(self, attribute):
self.push(commands.ListAttributeRemoveCommand(self._graph, attribute))
@Slot(Node)
def appendSelection(self, node):
if not self._selectedNodes.contains(node):
self._selectedNodes.append(node)
@Slot(Node)
def selectFollowing(self, node):
for n in self._graph.dfsOnDiscover(startNodes=[node], reverse=True, dependenciesOnly=True)[0]:
self.appendSelection(n)
self.selectedNodesChanged.emit()
@Slot(QObject, QObject)
def boxSelect(self, selection, draggable):
x = selection.x() - draggable.x()
@ -675,8 +686,7 @@ class UIGraph(QObject):
bbox = self._layout.boundingBox([n])
# evaluate if the selection and node intersect
if not (x > bbox[2] + bbox[0] or otherX < bbox[0] or y > bbox[3] + bbox[1] or otherY < bbox[1]):
if not self._selectedNodes.contains(n):
self._selectedNodes.append(n)
self.appendSelection(n)
self.selectedNodesChanged.emit()
@Slot()

View file

@ -55,8 +55,8 @@ Item {
function selectNode(node)
{
uigraph.selectedNode = node
if (!uigraph.selectedNodes.contains(node) && node !== null) {
uigraph.selectedNodes.append(node)
if (node !== null) {
uigraph.appendSelection(node)
uigraph.selectedNodesChanged()
}
}
@ -68,7 +68,9 @@ Item {
} else {
var nodes = uigraph.duplicateNodes(uigraph.selectedNodes)
}
uigraph.clearNodeSelection()
selectNode(nodes[0])
uigraph.selectFollowing(nodes[0])
}
@ -80,6 +82,8 @@ Item {
uigraph.removeNodesFrom(uigraph.selectedNode)
else
uigraph.removeNodes(uigraph.selectedNodes)
if(event.key === Qt.Key_D)
duplicateNode(uigraph.selectedNode, event.modifiers == Qt.AltModifier)
}
MouseArea {
@ -448,7 +452,7 @@ Item {
onPressed: {
if (mouse.button == Qt.LeftButton) {
if (mouse.modifiers & Qt.ControlModifier) {
if (mouse.modifiers & Qt.ControlModifier && !(mouse.modifiers & Qt.AltModifier)) {
if (mainSelected && selected) {
// left clicking a selected node twice with control will deselect it
uigraph.selectedNodes.remove(node)
@ -457,7 +461,10 @@ Item {
return
}
} else if (mouse.modifiers & Qt.AltModifier) {
duplicateNode(node, true)
if (!(mouse.modifiers & Qt.ControlModifier)){
uigraph.clearNodeSelection()
}
uigraph.selectFollowing(node)
} else if (!mainSelected && !selected) {
uigraph.clearNodeSelection()
}