diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 13a7d4f4aaf4ddf411830b2da208ad905db03744..26aa87c24b540c569b6b08c4ed9ed63d064fcf47 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -669,14 +669,15 @@ class GraphWidget(QGraphicsView): if self._state == "move": self._selected_new_edge_src_node = None - self.mouse_origin_x = pos.x() - self.mouse_origin_y = pos.y() - items = self.items(event.pos()) if items and type(items[0]) == EdgeItem: edge = items[0] if edge: self.set_current_edge(edge) + elif items and type(items[0]) == NodeItem: + self._mouse_origin_x = pos.x() + self._mouse_origin_y = pos.y() + self._current_moved_node = items[0] # Add nodes and edges elif self._state == "add": @@ -712,6 +713,17 @@ class GraphWidget(QGraphicsView): def mouseReleaseEvent(self, event): self.clicked = False + if self._state == "move": + pos = self.mapToScene(event.pos()) + self._undo.push( + SetNodePosCommand( + self._current_moved_node, + (pos.x(), pos.y()), + (self._mouse_origin_x, + self._mouse_origin_y) + ) + ) + self.update() super(GraphWidget, self).mouseReleaseEvent(event) diff --git a/src/View/Network/UndoCommand.py b/src/View/Network/UndoCommand.py index 979ec8664c1c72b69044b437ef8a0efaab935034..d6d381251eca3fb1fd3a9178433fa335ddea756f 100644 --- a/src/View/Network/UndoCommand.py +++ b/src/View/Network/UndoCommand.py @@ -3,6 +3,10 @@ from copy import deepcopy from tools import trace, timer +from PyQt5.QtCore import ( + QPointF, +) + from PyQt5.QtWidgets import ( QMessageBox, QUndoCommand, QUndoStack, ) @@ -24,6 +28,20 @@ class AddNodeCommand(QUndoCommand): def redo(self): self._graph.insert_node(self._node) +class SetNodePosCommand(QUndoCommand): + def __init__(self, node, new, old): + QUndoCommand.__init__(self) + + self._node = node + self._new = new + self._old = old + + def undo(self): + self._node.node.setPos(self._old[0], self._old[1]) + + def redo(self): + self._node.node.setPos(self._new[0], self._new[1]) + class DelNodeCommand(QUndoCommand): def __init__(self, graph, node): QUndoCommand.__init__(self)