mirror of https://gitlab.com/pamhyr/pamhyr2
Network: Fix edge delete whene there are multiple edge between two node.
parent
9c5ea0bdd9
commit
0c0d7f3481
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue