Network: Add edge add and del command.

mesh
Pierre-Antoine Rouby 2023-06-09 09:33:13 +02:00
parent 520d8f73df
commit ded95ef097
3 changed files with 61 additions and 14 deletions

View File

@ -103,10 +103,29 @@ 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):
self._nodes = list(
filter(
lambda n: n.name != node_name,
self._nodes
)
)
self._status.modified()
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)
return node return node
def _create_edge(self, n1:Node, n2:Node):
edge = self._edge_ctor(
self._edges_ids,
"", n1, n2,
status = self._status
)
self._edges_ids += 1
return edge
def _add_edge(self, edge): def _add_edge(self, edge):
# This edge already exists ? # This edge already exists ?
if any(filter(lambda e: (e.node1 == edge.node1 and if any(filter(lambda e: (e.node1 == edge.node1 and
@ -115,28 +134,19 @@ class Graph(object):
return None return None
self._edges.append(edge) self._edges.append(edge)
self._edges_ids += 1
self._status.modified() self._status.modified()
return edge return edge
def add_edge(self, n1:Node, n2:Node): def add_edge(self, n1:Node, n2:Node):
edge = self._edge_ctor(self._edges_ids, edge = self._create_edge(n1, n2)
"", n1, n2,
status = self._status)
return self._add_edge(edge) return self._add_edge(edge)
def insert_edge(self, edge): def insert_edge(self, edge):
return self._add_edge(edge) return self._add_edge(edge)
def remove_node(self, node_name:str): def create_edge(self, n1:Node, n2:Node):
self._nodes = list( return self._create_edge(n1, n2)
filter(
lambda n: n.name != node_name,
self._nodes
)
)
self._status.modified()
def remove_edge(self, edge_name:str): def remove_edge(self, edge_name:str):
self._edges = list( self._edges = list(

View File

@ -462,7 +462,12 @@ class GraphWidget(QGraphicsView):
if node1 == node2: if node1 == node2:
return return
edge = self.graph.add_edge(node1.node, node2.node) edge = self.graph.create_edge(node1.node, node2.node)
self._undo.push(
AddEdgeCommand(
self.graph, edge
)
)
self.set_selected_item(None) self.set_selected_item(None)
self.set_selected_new_edge_src_node(None) self.set_selected_new_edge_src_node(None)
# Reset the temporary line # Reset the temporary line
@ -484,7 +489,11 @@ class GraphWidget(QGraphicsView):
Nothing Nothing
""" """
edge = item.edge edge = item.edge
self.graph.remove_edge(edge.name) self._undo.push(
DelEdgeCommand(
self.graph, edge
)
)
# Clear all scene and redraw it # Clear all scene and redraw it
self.scene().clear() self.scene().clear()
@ -776,6 +785,7 @@ class GraphWidget(QGraphicsView):
def _menu_edge(self, event, pos, items, menu): def _menu_edge(self, event, pos, items, menu):
delete = menu.addAction(_translate("Network", "Delete the reach")) delete = menu.addAction(_translate("Network", "Delete the reach"))
if self.graph.is_enable_edge(items[0].edge): if self.graph.is_enable_edge(items[0].edge):
enable = menu.addAction(_translate("Network", "Disable the reach")) enable = menu.addAction(_translate("Network", "Disable the reach"))
is_enable = True is_enable = True

View File

@ -52,6 +52,33 @@ class DelNodeCommand(QUndoCommand):
self._graph.remove_node(self._node.name) self._graph.remove_node(self._node.name)
class AddEdgeCommand(QUndoCommand):
def __init__(self, graph, edge):
QUndoCommand.__init__(self)
self._graph = graph
self._edge = edge
def undo(self):
self._graph.remove_edge(self._edge.name)
def redo(self):
self._graph.insert_edge(self._edge)
class DelEdgeCommand(QUndoCommand):
def __init__(self, graph, edge):
QUndoCommand.__init__(self)
self._graph = graph
self._edge = edge
def undo(self):
self._graph.insert_edge(self._edge)
def redo(self):
self._graph.remove_edge(self._edge.name)
class SetCommand(QUndoCommand): class SetCommand(QUndoCommand):
def __init__(self, element, column, new_value): def __init__(self, element, column, new_value):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)