diff --git a/src/Model/Network/Edge.py b/src/Model/Network/Edge.py
index 0cc9701e..4c12c8f7 100644
--- a/src/Model/Network/Edge.py
+++ b/src/Model/Network/Edge.py
@@ -60,3 +60,9 @@ class Edge(object):
def disable(self):
self._enable = False
self._status.modified()
+
+ def reverse(self):
+ tmp = self.node1
+ self.node1 = self.node2
+ self.node2 = tmp
+ self._status.modified()
diff --git a/src/Model/Network/Graph.py b/src/Model/Network/Graph.py
index fce8c4c3..f6871abd 100644
--- a/src/Model/Network/Graph.py
+++ b/src/Model/Network/Graph.py
@@ -56,7 +56,7 @@ class Graph(object):
)
def node(self, node_name:str):
- node = list(
+ node = list(
filter(
lambda n: n.name == node_name,
self._nodes
@@ -69,7 +69,7 @@ class Graph(object):
return node[0]
def edge(self, edge_name:str):
- edge = list(
+ edge = list(
filter(
lambda e: e.name == edge_name,
self._edges
@@ -154,7 +154,7 @@ class Graph(object):
acc or (
(e.node1 == node or
e.node2 == node)
- and e.enable
+ and e._enable
)
),
self._edges,
@@ -162,4 +162,4 @@ class Graph(object):
)
def is_enable_edge(self, edge):
- return edge.enable
+ return edge._enable
diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py
index 3cfdf47c..2835ac7e 100644
--- a/src/View/Network/GraphWidget.py
+++ b/src/View/Network/GraphWidget.py
@@ -422,6 +422,17 @@ class GraphWidget(QGraphicsView):
if type(i) == NodeItem:
self.texts[i].rename()
+ def enable_edge(self, edge, prev):
+ edge.edge.enable(enable = not prev)
+ self.changeEdge.emit(self.sender())
+ self.changeNode.emit(self.sender())
+ self.display_update()
+
+ def reverse_edge(self, edge):
+ edge.edge.reverse()
+ self.changeEdge.emit(self.sender())
+ self.display_update()
+
def display_update(self):
"""Clear the scene and redraw it
@@ -633,6 +644,11 @@ class GraphWidget(QGraphicsView):
pos = self.mapToScene(event.pos())
self.clicked = True
+ if event.buttons() & Qt.RightButton:
+ self.update()
+ super(GraphWidget, self).mousePressEvent(event)
+ return
+
# Move item and select edge item
if self._state == "move":
self._selected_new_edge_src_node = None
@@ -753,12 +769,23 @@ class GraphWidget(QGraphicsView):
def _menu_edge(self, event, pos, items, menu):
delete = menu.addAction(_translate("Network", "Delete the reach"))
- disable = menu.addAction(_translate("Network", "Disable the reach"))
+ if self.graph.is_enable_edge(items[0].edge):
+ enable = menu.addAction(_translate("Network", "Disable the reach"))
+ is_enable = True
+ else:
+ enable = menu.addAction(_translate("Network", "Enable the reach"))
+ is_enable = False
+
+ reverse = menu.addAction(_translate("Network", "Reverse the reach orientation"))
action = menu.exec_(self.mapToGlobal(event.pos()))
if action == delete:
self.del_edge(items[0])
+ elif action == enable:
+ self.enable_edge(items[0], is_enable)
+ elif action == reverse:
+ self.reverse_edge(items[0])
def contextMenuEvent(self, event):
pos = self.mapToScene(event.pos())
diff --git a/src/View/Network/Table.py b/src/View/Network/Table.py
index 1bf0e5b4..33bd3d33 100644
--- a/src/View/Network/Table.py
+++ b/src/View/Network/Table.py
@@ -79,11 +79,12 @@ class TrueFalseComboBoxDelegate(QItemDelegate):
self.commitData.emit(self.sender())
class GraphTableModel(QAbstractTableModel):
- def __init__(self, headers=[], graph=None, rows_type="nodes"):
+ def __init__(self, headers=[], graph=None, undo = None, rows_type="nodes"):
super(QAbstractTableModel, self).__init__()
self.headers = headers
self.graph = graph
self._type = rows_type
+ self._undo = undo
if self._type == "nodes":
self.rows = graph.nodes()
@@ -166,3 +167,11 @@ class GraphTableModel(QAbstractTableModel):
self.rows[index.row()].node2 = tmp
self.dataChanged.emit(index, index, [Qt.DisplayRole])
self.layoutChanged.emit()
+
+ def undo(self):
+ self._undo.undo()
+ self.layoutChanged.emit()
+
+ def redo(self):
+ self._undo.redo()
+ self.layoutChanged.emit()
diff --git a/src/View/Network/Window.py b/src/View/Network/Window.py
index 1bdd676a..01d08417 100644
--- a/src/View/Network/Window.py
+++ b/src/View/Network/Window.py
@@ -1,5 +1,9 @@
# -*- coding: utf-8 -*-
+from PyQt5.QtGui import (
+ QKeySequence,
+)
+
from PyQt5.QtCore import (
Qt, QRect, QVariant, QAbstractTableModel, pyqtSlot, pyqtSignal,
QEvent,
@@ -32,6 +36,7 @@ class NetworkWindow(ASubMainWindow):
super(NetworkWindow, self).__init__(name=self._title, ui="Network", parent=parent)
self.ui.setWindowTitle(self._title)
+ self.setup_sc()
self.setup_graph()
self.setup_table()
self.setup_connections()
@@ -111,11 +116,6 @@ class NetworkWindow(ASubMainWindow):
self.clicked_del
)
- self.find(QPushButton, "pushButton_reverse").clicked.connect(
- self.reverse_edge
- )
-
-
def clicked_add(self):
if self.get_action_checkable("action_toolBar_add"):
self.set_action_checkable("action_toolBar_del", False)
@@ -135,18 +135,3 @@ class NetworkWindow(ASubMainWindow):
if key == Qt.Key_Escape:
self._graph_widget.reset_selection
-
- def reverse_edge(self):
- """Reverse edge direction of selected table rows
-
- Returns:
- Nothing
- """
- indices = self.find(QTableView, "tableView_reachs").selectionModel().selectedIndexes()
- indexes = {}
-
- for index in sorted(indices):
- indexes[index.row()] = index
-
- for row in indexes:
- self.reachs_model.reverse_edge(indexes[row])
diff --git a/src/View/ui/Network.ui b/src/View/ui/Network.ui
index 9235c0dc..812fc58f 100644
--- a/src/View/ui/Network.ui
+++ b/src/View/ui/Network.ui
@@ -20,7 +20,7 @@
Qt::Vertical
-
+
-
@@ -31,7 +31,7 @@
Qt::Horizontal
-
+
-
@@ -68,13 +68,6 @@
- -
-
-
- Reverse
-
-
-
-
@@ -108,7 +101,7 @@
-
+
-