mirror of https://gitlab.com/pamhyr/pamhyr2
network: Add node name to graphics scene.
parent
df1a77aa4f
commit
dbf27e6336
|
|
@ -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 (
|
||||||
)
|
)
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
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):
|
||||||
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):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
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):
|
||||||
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):
|
||||||
|
|
||||||
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):
|
||||||
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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue