mirror of https://gitlab.com/pamhyr/pamhyr2
Network: Add edge add and del command.
parent
520d8f73df
commit
ded95ef097
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue