From 7f1f028b17e4ff4e0f409a5ea93667bd02d33bab Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Thu, 8 Jun 2023 14:50:40 +0200 Subject: [PATCH] Network: Some minor change. --- src/Model/Network/Edge.py | 6 ++++++ src/Model/Network/Graph.py | 8 ++++---- src/View/Network/GraphWidget.py | 29 ++++++++++++++++++++++++++++- src/View/Network/Table.py | 11 ++++++++++- src/View/Network/Window.py | 25 +++++-------------------- src/View/ui/Network.ui | 13 +++---------- 6 files changed, 56 insertions(+), 36 deletions(-) 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 @@ <property name="orientation"> <enum>Qt::Vertical</enum> </property> - <widget class="QWidget" name=""> + <widget class="QWidget" name="layoutWidget"> <layout class="QHBoxLayout" name="horizontalLayout_8"> <item> <layout class="QHBoxLayout" name="horizontalLayout_graph"/> @@ -31,7 +31,7 @@ <property name="orientation"> <enum>Qt::Horizontal</enum> </property> - <widget class="QWidget" name=""> + <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="verticalLayout_9"> <item> <layout class="QHBoxLayout" name="horizontalLayout_10"> @@ -68,13 +68,6 @@ </property> </widget> </item> - <item> - <widget class="QPushButton" name="pushButton_reverse"> - <property name="text"> - <string>Reverse</string> - </property> - </widget> - </item> <item> <spacer name="horizontalSpacer_9"> <property name="orientation"> @@ -108,7 +101,7 @@ </item> </layout> </widget> - <widget class="QWidget" name=""> + <widget class="QWidget" name="layoutWidget"> <layout class="QVBoxLayout" name="verticalLayout_8"> <item> <layout class="QHBoxLayout" name="horizontalLayout_9"> -- GitLab