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

network: Add node name to graphics scene.

Showing with 62 additions and 16 deletions
+62 -16
...@@ -177,6 +177,7 @@ class NetworkWindow(ASubWindow): ...@@ -177,6 +177,7 @@ class NetworkWindow(ASubWindow):
# Connection # Connection
self.nodes_model.dataChanged.connect(self.reachs_model.update) self.nodes_model.dataChanged.connect(self.reachs_model.update)
self.nodes_model.dataChanged.connect(self.graph_widget.rename_nodes)
self.reachs_model.dataChanged.connect(self.nodes_model.update) self.reachs_model.dataChanged.connect(self.nodes_model.update)
self.graph_widget.changeEdge.connect(self.reachs_model.update) self.graph_widget.changeEdge.connect(self.reachs_model.update)
self.graph_widget.changeNode.connect(self.nodes_model.update) self.graph_widget.changeNode.connect(self.nodes_model.update)
......
...@@ -17,7 +17,7 @@ from PyQt5.QtGui import ( ...@@ -17,7 +17,7 @@ from PyQt5.QtGui import (
) )
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QApplication, QGraphicsItem, QGraphicsScene, QApplication, QGraphicsItem, QGraphicsScene,
QGraphicsView, QStyle QGraphicsView, QStyle, QGraphicsTextItem,
) )
class LandMark(QGraphicsItem): class LandMark(QGraphicsItem):
...@@ -79,7 +79,7 @@ class NodeItem(QGraphicsItem): ...@@ -79,7 +79,7 @@ class NodeItem(QGraphicsItem):
def boundingRect(self): def boundingRect(self):
adjust = 2.0 adjust = 2.0
return QRectF(-10 - adjust, -10 - adjust, 23 + adjust, 23 + adjust) return QRectF(-10 - adjust, -10 - adjust, 20 + adjust, 20 + adjust)
def shape(self): def shape(self):
path = QPainterPath() path = QPainterPath()
...@@ -111,12 +111,6 @@ class NodeItem(QGraphicsItem): ...@@ -111,12 +111,6 @@ class NodeItem(QGraphicsItem):
return super(NodeItem, self).itemChange(change, value) return super(NodeItem, self).itemChange(change, value)
def mousePressEvent(self, event): def mousePressEvent(self, event):
# Switch selected node
# if not self.graph.selectedItem() is self:
# self.graph.setSelectedItem(self)
# elif self.graph.selectedItem() is self:
# self.graph.setSelectedNewEdgeSrcNode(self)
self.update() self.update()
super(NodeItem, self).mousePressEvent(event) super(NodeItem, self).mousePressEvent(event)
...@@ -217,6 +211,36 @@ class EdgeItem(QGraphicsItem): ...@@ -217,6 +211,36 @@ class EdgeItem(QGraphicsItem):
painter.drawPolygon(QPolygonF([line_center, arrow_p1, arrow_p2])) painter.drawPolygon(QPolygonF([line_center, arrow_p1, arrow_p2]))
class NodeText(QGraphicsTextItem):
def __init__(self, node_item):
super(NodeText, self).__init__()
self.item = node_item
self.setPlainText(self.item.node.name)
self.setDefaultTextColor(Qt.black)
#self.setPos(self.item.pos())
self.set_custom_pos(self.item.pos())
self.setZValue(2)
def set_custom_pos(self, pos):
x = pos.x()
y = pos.y() - 42
self.setPos(QPointF(x,y))
def paint(self, painter, option, widget):
color = QColor(Qt.white)
color.setAlpha(128)
painter.setBrush(color)
painter.drawRect(self.boundingRect())
super(NodeText, self).paint(painter, option, widget)
def rename(self):
self.setPlainText(self.item.node.name)
class NewEdgeLine(QGraphicsItem): class NewEdgeLine(QGraphicsItem):
def __init__(self, src, dest): def __init__(self, src, dest):
super(NewEdgeLine, self).__init__() super(NewEdgeLine, self).__init__()
...@@ -263,10 +287,11 @@ class GraphWidget(QGraphicsView): ...@@ -263,10 +287,11 @@ class GraphWidget(QGraphicsView):
self.node_items = [] self.node_items = []
self.edge_items = [] self.edge_items = []
self.texts = {}
scene = QGraphicsScene(self) scene = QGraphicsScene(self)
scene.setItemIndexMethod(QGraphicsScene.NoIndex) scene.setItemIndexMethod(QGraphicsScene.NoIndex)
scene.setSceneRect(0, 0, 1000, 1000) scene.setSceneRect(0, 0, 2000, 2000)
self.setScene(scene) self.setScene(scene)
self.setCacheMode(QGraphicsView.CacheBackground) self.setCacheMode(QGraphicsView.CacheBackground)
self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate) self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
...@@ -285,9 +310,12 @@ class GraphWidget(QGraphicsView): ...@@ -285,9 +310,12 @@ class GraphWidget(QGraphicsView):
def create_items(self): def create_items(self):
self.node_items = [] self.node_items = []
self.edge_items = [] self.edge_items = []
self.texts = {}
for node in self.graph.nodes(): for node in self.graph.nodes():
inode = NodeItem(node, self) inode = NodeItem(node, self)
self.texts[inode] = NodeText(inode)
self.scene().addItem(self.texts[inode])
self.scene().addItem(inode) self.scene().addItem(inode)
self.node_items.append(inode) self.node_items.append(inode)
...@@ -321,6 +349,8 @@ class GraphWidget(QGraphicsView): ...@@ -321,6 +349,8 @@ class GraphWidget(QGraphicsView):
inode = NodeItem(node, self) inode = NodeItem(node, self)
self.scene().addItem(inode) self.scene().addItem(inode)
self.node_items.append(inode) self.node_items.append(inode)
self.texts[inode] = NodeText(inode)
self.scene().addItem(self.texts[inode])
self.changeNode.emit(self.sender()) self.changeNode.emit(self.sender())
...@@ -333,6 +363,8 @@ class GraphWidget(QGraphicsView): ...@@ -333,6 +363,8 @@ class GraphWidget(QGraphicsView):
) )
) )
self.setSelectedItem(None)
for edge in edges: for edge in edges:
self.graph.remove_edge(edge.edge.name) self.graph.remove_edge(edge.edge.name)
...@@ -343,13 +375,20 @@ class GraphWidget(QGraphicsView): ...@@ -343,13 +375,20 @@ class GraphWidget(QGraphicsView):
self.changeNode.emit(self.sender()) self.changeNode.emit(self.sender())
self.changeEdge.emit(self.sender()) self.changeEdge.emit(self.sender())
def rename_nodes(self):
for i in self.texts:
if type(i) == NodeItem:
self.texts[i].rename()
def add_edge(self, node1, node2): def add_edge(self, node1, node2):
if node1 == node2: if node1 == node2:
return return
edge = self.graph.add_edge(node1.node, node2.node) edge = self.graph.add_edge(node1.node, node2.node)
# iedge = EdgeItem(node1, node2, edge, self) # iedge = EdgeItem(node1, node2, edge, self)
# self.scene().addItem(iedge) # self.scene().addItem(iedge)
# self.edge_items.append(iedge) # self.edge_items.append(iedge)
self.setSelectedItem(None)
self.setSelectedNewEdgeSrcNode(None) self.setSelectedNewEdgeSrcNode(None)
self.tmp_line = None self.tmp_line = None
...@@ -387,16 +426,21 @@ class GraphWidget(QGraphicsView): ...@@ -387,16 +426,21 @@ class GraphWidget(QGraphicsView):
def nodeChangePosition(self, pos, node): def nodeChangePosition(self, pos, node):
node.node.setPos(pos.x(), pos.y()) node.node.setPos(pos.x(), pos.y())
self.texts[node].set_custom_pos(pos)
self.texts[node].update()
def selectedItem(self): def selectedItem(self):
return self._selectedItem return self._selectedItem
def setSelectedItem(self, node): def setSelectedItem(self, item):
previous_node = self._selectedItem previous_item = self._selectedItem
self._selectedItem = node self._selectedItem = item
if previous_node: if previous_item:
previous_node.update() previous_item.update()
if item:
item.update()
def selectedNewEdgeSrcNode(self): def selectedNewEdgeSrcNode(self):
return self._selectedNewEdgeSrcNode return self._selectedNewEdgeSrcNode
...@@ -518,5 +562,6 @@ class GraphWidget(QGraphicsView): ...@@ -518,5 +562,6 @@ class GraphWidget(QGraphicsView):
self.tmp_line.dest = pos self.tmp_line.dest = pos
self.tmp_line.update() self.tmp_line.update()
self.update() if self._state == "move":
super(GraphWidget, self).mouseMoveEvent(event) self.update()
super(GraphWidget, self).mouseMoveEvent(event)
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