diff --git a/src/Model/River.py b/src/Model/River.py index 35ece3d9..d6eb9423 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -919,3 +919,5 @@ Last export at: @date.""" self._add_edge(r1) self._add_edge(r2) + + return r1, r2 diff --git a/src/View/Network/ContextMenu.py b/src/View/Network/ContextMenu.py index 8ec38edf..b91291a1 100644 --- a/src/View/Network/ContextMenu.py +++ b/src/View/Network/ContextMenu.py @@ -96,6 +96,7 @@ class EdgeMenu(AbstractMenu): reverse = self._menu.addAction(self._trad["menu_rev_edge"]) delete = self._menu.addAction(self._trad["menu_del_edge"]) + split = self._menu.addAction(self._trad["menu_split_edge"]) if self._parent.graph.is_enable_edge(it.edge): enable = self._menu.addAction(self._trad["menu_dis_edge"]) is_enable = True @@ -110,3 +111,5 @@ class EdgeMenu(AbstractMenu): self._parent.enable_edge(it, is_enable) elif action == reverse: self._parent.reverse_edge(it) + elif action == split: + self._parent.split_edge(it) diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 01d5b40a..1021b627 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -38,6 +38,7 @@ from Model.Network.Node import Node from Model.Network.Edge import Edge from Model.Network.Graph import Graph +from View.Network.ProfileDialog import SelectProfileDialog from View.Network.UndoCommand import * from View.Network.ContextMenu import ( DefaultMenu, NodeMenu, EdgeMenu, @@ -720,6 +721,31 @@ class GraphWidget(QGraphicsView): self.changeNode.emit(self.sender()) self.changeEdge.emit(self.sender()) + def split_edge(self, item): + edge = item.edge + + dlg = SelectProfileDialog( + study=self.parent._study, + reach=edge, + trad=self._trad, + parent=self.parent, + ) + if not dlg.exec(): + return + + profile = dlg._profile + self._undo.push( + SplitEdgeCommand( + self.graph, edge, profile + ) + ) + + self.scene().clear() + self.create_items() + + self.changeNode.emit(self.sender()) + self.changeEdge.emit(self.sender()) + def update_edges(self, node): """Update display of all edges linked with the node diff --git a/src/View/Network/UndoCommand.py b/src/View/Network/UndoCommand.py index d099b186..9229cc17 100644 --- a/src/View/Network/UndoCommand.py +++ b/src/View/Network/UndoCommand.py @@ -117,6 +117,27 @@ class DelEdgeCommand(QUndoCommand): def redo(self): self._graph.remove_edge(self._edge) +class SplitEdgeCommand(QUndoCommand): + def __init__(self, graph, edge, profile): + QUndoCommand.__init__(self) + + self._graph = graph + self._edge = edge + self._profile = profile + self._new_r1 = None + self._new_r2 = None + + def undo(self): + self._new_r1.set_as_deleted() + self._new_r2.set_as_deleted() + + def redo(self): + if self._new_r1 is None: + self._new_r1, self._new_r2 = self._graph._split_reach( + self._edge, self._profile) + else: + self._new_r1.set_as_not_deleted() + self._new_r2.set_as_not_deleted() class SetCommand(QUndoCommand): def __init__(self, element, column, new_value): diff --git a/src/View/Network/translate.py b/src/View/Network/translate.py index 3e4034c9..a70ab82d 100644 --- a/src/View/Network/translate.py +++ b/src/View/Network/translate.py @@ -47,6 +47,7 @@ class NetworkTranslate(MainTranslate): ) self._dict["menu_del_edge"] = _translate("Network", "Delete the reach") + self._dict["menu_split_edge"] = _translate("Network", "Split the reach") self._dict["menu_ena_edge"] = _translate("Network", "Enable the reach") self._dict["menu_dis_edge"] = _translate("Network", "Disable the reach") @@ -54,6 +55,11 @@ class NetworkTranslate(MainTranslate): "Network", "Reverse the reach orientation" ) + self._dict["dialog_select_profile_title"] = _translate( + "Network", + "Select profile" + ) + self._sub_dict["table_headers_node"] = { "name": self._dict['name'], "type": self._dict['type'],