From 0c0d7f34811f7578370e049c1327cbb085484b5b Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Tue, 16 Apr 2024 15:15:30 +0200 Subject: [PATCH] Network: Fix edge delete whene there are multiple edge between two node. --- doc/dev/documentation.org | 2 +- src/Model/Network/Graph.py | 28 +++++++++------------------- src/Model/Network/test_network.py | 6 +++--- src/View/Network/GraphWidget.py | 4 ++++ src/View/Network/UndoCommand.py | 10 +++++----- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/doc/dev/documentation.org b/doc/dev/documentation.org index bbef8dc2..6d5edf6c 100644 --- a/doc/dev/documentation.org +++ b/doc/dev/documentation.org @@ -636,7 +636,7 @@ class AddNodeCommand(QUndoCommand): self._node = node def undo(self): - self._graph.remove_node(self._node.name) + self._graph.remove_node(self._node) def redo(self): self._graph.insert_node(self._node) diff --git a/src/Model/Network/Graph.py b/src/Model/Network/Graph.py index 9fb48fa0..69ded845 100644 --- a/src/Model/Network/Graph.py +++ b/src/Model/Network/Graph.py @@ -142,26 +142,21 @@ class Graph(object): def insert_node(self, node): return self._add_node(node) - def remove_node(self, node_name: str): - self._nodes = list( - filter( - lambda n: n.name != node_name, - self._nodes - ) - ) - self._remove_associated_edge(node_name) + def remove_node(self, node): + self._nodes.remove(node) + self._remove_associated_edge(node) self._status.modified() - def _remove_associated_edge(self, node_name: str): + def _remove_associated_edge(self, node: str): edges = list( filter( - lambda e: (e.node1.name == node_name or - e.node2.name == node_name), + lambda e: (e.node1 == node or + e.node2 == node), self._edges, ) ) for edge in edges: - self.remove_edge(edge.name) + self.remove_edge(edge) def create_node(self, x: float = 0.0, y: float = 0.0): node = self._create_node(x, y) @@ -197,13 +192,8 @@ class Graph(object): def create_edge(self, n1: Node, n2: Node): return self._create_edge(n1, n2) - def remove_edge(self, edge_name: str): - self._edges = list( - filter( - lambda e: e.name != edge_name, - self._edges - ) - ) + def remove_edge(self, edge): + self._edges.remove(edge) self._status.modified() def is_upstream_node(self, node): diff --git a/src/Model/Network/test_network.py b/src/Model/Network/test_network.py index e9b5c428..23cbdcce 100644 --- a/src/Model/Network/test_network.py +++ b/src/Model/Network/test_network.py @@ -60,7 +60,7 @@ class GraphTestCase(unittest.TestCase): e0 = g.add_edge(n0, n1) - g.remove_edge(e0.name) + g.remove_edge(e0) self.assertEqual(g.nodes_counts(), 2) self.assertEqual(g.edges_counts(), 0) @@ -73,7 +73,7 @@ class GraphTestCase(unittest.TestCase): e0 = g.add_edge(n0, n1) - g.remove_node(n0.name) + g.remove_node(n0) self.assertEqual(g.nodes_counts(), 1) self.assertEqual(g.edges_counts(), 0) @@ -88,7 +88,7 @@ class GraphTestCase(unittest.TestCase): e0 = g.add_edge(n0, n1) e1 = g.add_edge(n1, n2) - g.remove_node(n1.name) + g.remove_node(n1) self.assertEqual(g.nodes_counts(), 2) self.assertEqual(g.edges_counts(), 0) diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 88a6ad07..5db5e7df 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -457,9 +457,13 @@ class GraphWidget(QGraphicsView): self.m_origin_y = 0.0 self.clicked = False + self.setup_scene(min_size, max_size, size) + + def setup_scene(self, min_size, max_size, size): scene = QGraphicsScene(self) scene.setItemIndexMethod(QGraphicsScene.NoIndex) scene.setSceneRect(0, 0, 2000, 2000) + self.setScene(scene) self.setCacheMode(QGraphicsView.CacheBackground) self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate) diff --git a/src/View/Network/UndoCommand.py b/src/View/Network/UndoCommand.py index 5c752c0d..1a77840e 100644 --- a/src/View/Network/UndoCommand.py +++ b/src/View/Network/UndoCommand.py @@ -40,7 +40,7 @@ class AddNodeCommand(QUndoCommand): self._node = node def undo(self): - self._graph.remove_node(self._node.name) + self._graph.remove_node(self._node) def redo(self): self._graph.insert_node(self._node) @@ -85,9 +85,9 @@ class DelNodeCommand(QUndoCommand): ) for edge in self._edges: - self._graph.remove_edge(edge.name) + self._graph.remove_edge(edge) - self._graph.remove_node(self._node.name) + self._graph.remove_node(self._node) class AddEdgeCommand(QUndoCommand): @@ -98,7 +98,7 @@ class AddEdgeCommand(QUndoCommand): self._edge = edge def undo(self): - self._graph.remove_edge(self._edge.name) + self._graph.remove_edge(self._edge) def redo(self): self._graph.insert_edge(self._edge) @@ -115,7 +115,7 @@ class DelEdgeCommand(QUndoCommand): self._graph.insert_edge(self._edge) def redo(self): - self._graph.remove_edge(self._edge.name) + self._graph.remove_edge(self._edge) class SetCommand(QUndoCommand): -- GitLab