From 30c930d4519354f7fec5eec8fad26ca414b6e9ba Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Tue, 21 Mar 2023 11:54:19 +0100 Subject: [PATCH] network: Minor change. --- src/view/NetworkWindow.py | 10 ++++- src/view/network/GraphWidget.py | 69 ++++++++++++++------------------- src/view/ui/Network.ui | 15 +++++++ 3 files changed, 53 insertions(+), 41 deletions(-) diff --git a/src/view/NetworkWindow.py b/src/view/NetworkWindow.py index 99cf5fdb..36835515 100644 --- a/src/view/NetworkWindow.py +++ b/src/view/NetworkWindow.py @@ -11,7 +11,7 @@ from PyQt5.QtCore import ( ) from PyQt5.QtWidgets import ( - QTableView, QItemDelegate, QComboBox, QLineEdit, QHBoxLayout, + QTableView, QItemDelegate, QComboBox, QLineEdit, QHBoxLayout, QSlider, ) class LineEditDelegate(QItemDelegate): @@ -128,9 +128,15 @@ class NetworkWindow(ASubWindow): # Graph Widget - self.graph_widget = GraphWidget(self.graph) + self.graph_widget = GraphWidget(self.graph, parent=self) self.graph_layout = self.find(QHBoxLayout, "horizontalLayout_graph") self.graph_layout.addWidget(self.graph_widget) + # self.zoom_slider = QSlider(Qt.Orientation.Vertical, parent=self) + # self.zoom_slider.setMinimum(0) + # self.zoom_slider.setMaximum(99) + # self.zoom_slider.setValue(50) + # self.graph_layout.addWidget(self.zoom_slider) + # self.zoom_slider.valueChanged.connect(self.graph_widget.scaleViewSlider) # Nodes table diff --git a/src/view/network/GraphWidget.py b/src/view/network/GraphWidget.py index a224d3ee..a444465f 100644 --- a/src/view/network/GraphWidget.py +++ b/src/view/network/GraphWidget.py @@ -7,7 +7,7 @@ from model.network.Edge import Edge from model.network.Graph import Graph from PyQt5.QtCore import ( - qAbs, QLineF, QPointF, qrand, QRectF, QSizeF, qsrand, + qAbs, QLineF, QPointF, QPoint, qrand, QRectF, QSizeF, qsrand, Qt, QTime ) from PyQt5.QtGui import ( @@ -20,28 +20,16 @@ from PyQt5.QtWidgets import ( QGraphicsView, QStyle ) -class LandMark(QGraphicsItem): - def paint(self, painter, option, widget): - painter.setPen(QPen(Qt.black, 0)) - - painter.drawLine(-500, -500, 500, 500) - painter.drawLine(-500, 500, 500, -500) - - painter.drawLine(-500, -500, 500, -500) - painter.drawLine(500, -500, 500, 500) - painter.drawLine(500, 500, -500, 500) - painter.drawLine(-500, 500, -500, -500) - class NodeItem(QGraphicsItem): Type = QGraphicsItem.UserType + 1 - def __init__(self, node, graphWidget): + def __init__(self, node, graph_widget): super(NodeItem, self).__init__() self.node = node self.setPos(QPointF(self.node.pos.x, self.node.pos.y)) - self.graph = graphWidget + self.graph = graph_widget self.newPos = QPointF() self.setFlag(QGraphicsItem.ItemIsMovable) @@ -84,11 +72,11 @@ class NodeItem(QGraphicsItem): gradient.setColorAt(1, Qt.darkYellow) painter.setBrush(QBrush(gradient)) - painter.setPen(QPen(Qt.black, 0)) + # painter.setPen(QPen(Qt.black, 0)) painter.drawEllipse(-10, -10, 20, 20) painter.setFont(QFont("Arial", 20)) - painter.drawText(QRectF(-10, -10, 20, 20), Qt.AlignCenter, self.node.name) + painter.drawText(QPoint(-10, -10), self.node.name) def itemChange(self, change, value): if change == QGraphicsItem.ItemPositionHasChanged: @@ -166,9 +154,13 @@ class EdgeItem(QGraphicsItem): penWidth = 1.0 extra = (penWidth + self.arrowSize) / 2.0 - return QRectF(self.sourcePoint, - QSizeF(self.destPoint.x() - self.sourcePoint.x(), - self.destPoint.y() - self.sourcePoint.y())).normalized().adjusted(-extra, -extra, extra, extra) + return QRectF( + self.sourcePoint, + QSizeF( + self.destPoint.x() - self.sourcePoint.x(), + self.destPoint.y() - self.sourcePoint.y() + ) + ).normalized().adjusted(-extra, -extra, extra, extra) def paint(self, painter, option, widget): if not self.source or not self.dest: @@ -204,14 +196,15 @@ class EdgeItem(QGraphicsItem): class GraphWidget(QGraphicsView): - def __init__(self, graph): - super(GraphWidget, self).__init__() + def __init__(self, graph, parent=None): + super(GraphWidget, self).__init__(parent=parent) self.timerId = 0 + self.parent = parent scene = QGraphicsScene(self) scene.setItemIndexMethod(QGraphicsScene.NoIndex) - scene.setSceneRect(-500, -500, 500, 500) + scene.setSceneRect(0, 0, 10000, 10000) self.setScene(scene) self.setCacheMode(QGraphicsView.CacheBackground) self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate) @@ -219,7 +212,7 @@ class GraphWidget(QGraphicsView): self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorViewCenter) - scene.addItem(LandMark()) + # scene.addItem(LandMark()) self.graph = graph for node in self.graph.nodes(): @@ -228,7 +221,8 @@ class GraphWidget(QGraphicsView): # for edge in self.graph.edges(): # scene.addItem(EdgeItem(edge)) - self.scale(0.8, 0.8) + self.scale(1, 1) + self.previousScale = 1 self.setMinimumSize(400, 400) def itemMoved(self): @@ -257,20 +251,15 @@ class GraphWidget(QGraphicsView): else: super(GraphWidget, self).keyPressEvent(event) - def timerEvent(self, event): - nodes = [item for item in self.scene().items() if isinstance(item, Node)] + def drawBackground(self, painter, rect): + sceneRect = self.sceneRect() - for node in nodes: - node.calculateForces() - - itemsMoved = False - for node in nodes: - if node.advance(): - itemsMoved = True - - if not itemsMoved: - self.killTimer(self.timerId) - self.timerId = 0 + gradient = QLinearGradient(sceneRect.topLeft(), sceneRect.bottomRight()) + gradient.setColorAt(0, Qt.lightGray) + gradient.setColorAt(1, Qt.lightGray) + painter.fillRect(rect.intersected(sceneRect), QBrush(gradient)) + painter.setBrush(Qt.NoBrush) + painter.drawRect(sceneRect) def wheelEvent(self, event): self.scaleView(math.pow(2.0, -event.angleDelta().y() / 240.0)) @@ -278,7 +267,9 @@ class GraphWidget(QGraphicsView): def scaleView(self, scaleFactor): factor = self.transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width() - if factor < 0.07 or factor > 100: + if factor < 0.05 or factor > 1.5: return + # print(f"{scaleFactor} : {factor}") + self.scale(scaleFactor, scaleFactor) diff --git a/src/view/ui/Network.ui b/src/view/ui/Network.ui index 54513b99..1372ae77 100644 --- a/src/view/ui/Network.ui +++ b/src/view/ui/Network.ui @@ -33,6 +33,18 @@ <iconset> <normaloff>ressources/gtk_add.png</normaloff>ressources/gtk_add.png</iconset> </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRepeat"> + <bool>false</bool> + </property> + <property name="default"> + <bool>false</bool> + </property> + <property name="flat"> + <bool>false</bool> + </property> </widget> </item> <item> @@ -44,6 +56,9 @@ <iconset> <normaloff>ressources/gtk-remove.png</normaloff>ressources/gtk-remove.png</iconset> </property> + <property name="checkable"> + <bool>true</bool> + </property> </widget> </item> <item> -- GitLab