Commit 30c930d4 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

network: Minor change.

Showing with 53 additions and 41 deletions
+53 -41
......@@ -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
......
......@@ -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)
......@@ -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>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment