Network: Fix edge delete whene there are multiple edge between two node.

setup.py
Pierre-Antoine Rouby 2024-04-16 15:15:30 +02:00
parent 9c5ea0bdd9
commit 0c0d7f3481
5 changed files with 22 additions and 28 deletions

View File

@ -636,7 +636,7 @@ class AddNodeCommand(QUndoCommand):
self._node = node self._node = node
def undo(self): def undo(self):
self._graph.remove_node(self._node.name) self._graph.remove_node(self._node)
def redo(self): def redo(self):
self._graph.insert_node(self._node) self._graph.insert_node(self._node)

View File

@ -142,26 +142,21 @@ class Graph(object):
def insert_node(self, node): def insert_node(self, node):
return self._add_node(node) return self._add_node(node)
def remove_node(self, node_name: str): def remove_node(self, node):
self._nodes = list( self._nodes.remove(node)
filter( self._remove_associated_edge(node)
lambda n: n.name != node_name,
self._nodes
)
)
self._remove_associated_edge(node_name)
self._status.modified() self._status.modified()
def _remove_associated_edge(self, node_name: str): def _remove_associated_edge(self, node: str):
edges = list( edges = list(
filter( filter(
lambda e: (e.node1.name == node_name or lambda e: (e.node1 == node or
e.node2.name == node_name), e.node2 == node),
self._edges, self._edges,
) )
) )
for edge in 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): def create_node(self, x: float = 0.0, y: float = 0.0):
node = self._create_node(x, y) node = self._create_node(x, y)
@ -197,13 +192,8 @@ class Graph(object):
def create_edge(self, n1: Node, n2: Node): def create_edge(self, n1: Node, n2: Node):
return self._create_edge(n1, n2) return self._create_edge(n1, n2)
def remove_edge(self, edge_name: str): def remove_edge(self, edge):
self._edges = list( self._edges.remove(edge)
filter(
lambda e: e.name != edge_name,
self._edges
)
)
self._status.modified() self._status.modified()
def is_upstream_node(self, node): def is_upstream_node(self, node):

View File

@ -60,7 +60,7 @@ class GraphTestCase(unittest.TestCase):
e0 = g.add_edge(n0, n1) e0 = g.add_edge(n0, n1)
g.remove_edge(e0.name) g.remove_edge(e0)
self.assertEqual(g.nodes_counts(), 2) self.assertEqual(g.nodes_counts(), 2)
self.assertEqual(g.edges_counts(), 0) self.assertEqual(g.edges_counts(), 0)
@ -73,7 +73,7 @@ class GraphTestCase(unittest.TestCase):
e0 = g.add_edge(n0, n1) e0 = g.add_edge(n0, n1)
g.remove_node(n0.name) g.remove_node(n0)
self.assertEqual(g.nodes_counts(), 1) self.assertEqual(g.nodes_counts(), 1)
self.assertEqual(g.edges_counts(), 0) self.assertEqual(g.edges_counts(), 0)
@ -88,7 +88,7 @@ class GraphTestCase(unittest.TestCase):
e0 = g.add_edge(n0, n1) e0 = g.add_edge(n0, n1)
e1 = g.add_edge(n1, n2) e1 = g.add_edge(n1, n2)
g.remove_node(n1.name) g.remove_node(n1)
self.assertEqual(g.nodes_counts(), 2) self.assertEqual(g.nodes_counts(), 2)
self.assertEqual(g.edges_counts(), 0) self.assertEqual(g.edges_counts(), 0)

View File

@ -457,9 +457,13 @@ class GraphWidget(QGraphicsView):
self.m_origin_y = 0.0 self.m_origin_y = 0.0
self.clicked = False self.clicked = False
self.setup_scene(min_size, max_size, size)
def setup_scene(self, min_size, max_size, size):
scene = QGraphicsScene(self) scene = QGraphicsScene(self)
scene.setItemIndexMethod(QGraphicsScene.NoIndex) scene.setItemIndexMethod(QGraphicsScene.NoIndex)
scene.setSceneRect(0, 0, 2000, 2000) scene.setSceneRect(0, 0, 2000, 2000)
self.setScene(scene) self.setScene(scene)
self.setCacheMode(QGraphicsView.CacheBackground) self.setCacheMode(QGraphicsView.CacheBackground)
self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate) self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)

View File

@ -40,7 +40,7 @@ class AddNodeCommand(QUndoCommand):
self._node = node self._node = node
def undo(self): def undo(self):
self._graph.remove_node(self._node.name) self._graph.remove_node(self._node)
def redo(self): def redo(self):
self._graph.insert_node(self._node) self._graph.insert_node(self._node)
@ -85,9 +85,9 @@ class DelNodeCommand(QUndoCommand):
) )
for edge in self._edges: 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): class AddEdgeCommand(QUndoCommand):
@ -98,7 +98,7 @@ class AddEdgeCommand(QUndoCommand):
self._edge = edge self._edge = edge
def undo(self): def undo(self):
self._graph.remove_edge(self._edge.name) self._graph.remove_edge(self._edge)
def redo(self): def redo(self):
self._graph.insert_edge(self._edge) self._graph.insert_edge(self._edge)
@ -115,7 +115,7 @@ class DelEdgeCommand(QUndoCommand):
self._graph.insert_edge(self._edge) self._graph.insert_edge(self._edge)
def redo(self): def redo(self):
self._graph.remove_edge(self._edge.name) self._graph.remove_edge(self._edge)
class SetCommand(QUndoCommand): class SetCommand(QUndoCommand):