From ad7c195e4dfe955f7ed551ffa966803ec9aa3251 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 7 Jun 2023 10:11:56 +0200 Subject: [PATCH] Network: Graph: Improve contextmenu. --- src/View/Network/GraphWidget.py | 60 ++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 90d2bf5e..6760af31 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -6,14 +6,14 @@ from tools import timer from PyQt5.QtCore import ( Qt, QPoint, QPointF, QSizeF, QLineF, QRectF, - pyqtSlot, pyqtSignal, + pyqtSlot, pyqtSignal, QCoreApplication, ) from PyQt5.QtGui import ( QPainter, QColor, QBrush, QPen, QPainterPath, QPolygonF, ) from PyQt5.QtWidgets import ( - QApplication,QGraphicsScene, QGraphicsView, + QApplication, QGraphicsScene, QGraphicsView, QGraphicsItem, QGraphicsTextItem, QMenu, ) @@ -21,6 +21,9 @@ from Model.Network.Node import Node from Model.Network.Edge import Edge from Model.Network.Graph import Graph +_translate = QCoreApplication.translate + + class NodeItem(QGraphicsItem): Type = QGraphicsItem.UserType + 1 @@ -729,33 +732,42 @@ class GraphWidget(QGraphicsView): super(GraphWidget, self).mouseMoveEvent(event) + # Contextual menu + + def menu_default(self, event, pos, items, menu): + add_node = menu.addAction(_translate("Network", "Add node")) + + action = menu.exec_(self.mapToGlobal(event.pos())) + + if action == add_node: + self.add_node(pos) + + def menu_node(self, event, pos, items, menu): + delete = menu.addAction(_translate("Network", "Delete the node")) + disable = menu.addAction(_translate("Network", "Disable the node")) + + action = menu.exec_(self.mapToGlobal(event.pos())) + + if action == delete: + self.del_node(items[0]) + + def menu_edge(self, event, pos, items, menu): + delete = menu.addAction(_translate("Network", "Delete the reach")) + disable = menu.addAction(_translate("Network", "Disable the reach")) + + action = menu.exec_(self.mapToGlobal(event.pos())) + + if action == delete: + self.del_edge(items[0]) + def contextMenuEvent(self, event): pos = self.mapToScene(event.pos()) items = self.items(event.pos()) menu = QMenu(self) if len(items) == 0: - add_node = menu.addAction("Add") - + self.menu_default(event, pos, items, menu) elif type(items[0]) == NodeItem: - del_node = menu.addAction("Delete") - disable_node = menu.addAction("Disable") - + self.menu_node(event, pos, items, menu) elif type(items[0]) == EdgeItem: - del_edge = menu.addAction("Delete") - disable_edge = menu.addAction("Disable") - - action = menu.exec_(self.mapToGlobal(event.pos())) - - if len(items) == 0: - if action == add_node: - self.add_node(pos) - - elif type(items[0]) == NodeItem: - if action == del_node: - self.del_node(items[0]) - #if action == disable_node: - - elif type(items[0]) == EdgeItem: - if action == del_edge: - self.del_edge(items[0]) + self.menu_edge(event, pos, items, menu)