31 from __future__
import print_function
35 from python_qt_binding.QtCore
import Qt
36 from python_qt_binding.QtGui
import QBrush, QPainterPath, QPen
37 from python_qt_binding.QtWidgets
import (QGraphicsEllipseItem,
39 QGraphicsSimpleTextItem)
48 self, highlight_level, bounding_box, label, shape, color=None,
49 parent=None, label_pos=None, tooltip=None):
50 super(NodeItem, self).
__init__(highlight_level, parent)
66 self.
_label = QGraphicsSimpleTextItem(label)
67 self.
_label.setFont(GraphItem._LABEL_FONT)
68 label_rect = self.
_label.boundingRect()
70 label_rect.moveCenter(bounding_box.center())
72 label_rect.moveCenter(label_pos)
73 self.
_label.setPos(label_rect.x(), label_rect.y())
74 self.addToGroup(self.
_label)
75 if tooltip
is not None:
76 self.setToolTip(tooltip)
80 self.setAcceptHoverEvents(
True)
85 if shape
in (
'box',
'rect',
'rectangle'):
87 elif shape
in (
'ellipse',
'oval',
'circle'):
89 elif shape
in (
'box3d', ):
92 print(
"Invalid shape '%s', defaulting to ellipse" % shape, file=sys.stderr)
100 path = QPainterPath()
104 return super(self.__class__, self).
shape()
116 self.
_brush.setColor(color)
131 incoming_nodes = set()
135 if incoming_edge.from_node != self:
136 incoming_nodes.add(incoming_edge.from_node)
138 outgoing_nodes = set()
142 if outgoing_edge.to_node != self:
143 outgoing_nodes.add(outgoing_edge.to_node)
145 for edge
in cyclic_edges:
149 cyclic_nodes = incoming_nodes.intersection(outgoing_nodes)
151 for incoming_node
in incoming_nodes.difference(cyclic_nodes):
154 for outgoing_node
in outgoing_nodes.difference(cyclic_nodes):
157 for node
in cyclic_nodes:
164 incoming_edge.set_node_color()
165 incoming_edge.set_label_color()
167 incoming_edge.from_node.set_node_color()
169 outgoing_edge.set_node_color()
170 outgoing_edge.set_label_color()
172 outgoing_edge.to_node.set_node_color()