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 @@
ressources/gtk_add.pngressources/gtk_add.png
+
+ true
+
+
+ false
+
+
+ false
+
+
+ false
+
-
@@ -44,6 +56,9 @@
ressources/gtk-remove.pngressources/gtk-remove.png
+
+ true
+
-