def paint(self, painter, option, widget): """ Draws the node base not the ports. Args: painter (QtGui.QPainter): painter used for drawing the item. option (QtGui.QStyleOptionGraphicsItem): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ painter.save() bg_border = 1.0 rect = QtCore.QRectF(0.5 - (bg_border / 2), 0.5 - (bg_border / 2), self._width + bg_border, self._height + bg_border) radius = 2 border_color = QtGui.QColor(*self.border_color) path = QtGui.QPainterPath() path.addRoundedRect(rect, radius, radius) rect = self.boundingRect() bg_color = QtGui.QColor(*self.color) painter.setBrush(bg_color) painter.setPen(QtCore.Qt.NoPen) painter.drawRoundedRect(rect, radius, radius) if self.selected and NODE_SEL_COLOR: painter.setBrush(QtGui.QColor(*NODE_SEL_COLOR)) painter.drawRoundedRect(rect, radius, radius) label_rect = QtCore.QRectF(rect.left() + (radius / 2), rect.top() + (radius / 2), self._width - (radius / 1.25), 28) path = QtGui.QPainterPath() path.addRoundedRect(label_rect, radius / 1.5, radius / 1.5) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) painter.fillPath(path, painter.brush()) border_width = 0.8 if self.selected and NODE_SEL_BORDER_COLOR: border_width = 1.2 border_color = QtGui.QColor(*NODE_SEL_BORDER_COLOR) border_rect = QtCore.QRectF(rect.left() - (border_width / 2), rect.top() - (border_width / 2), rect.width() + border_width, rect.height() + border_width) pen = QtGui.QPen(border_color, border_width) pen.setCosmetic(self.viewer().get_zoom() < 0.0) path = QtGui.QPainterPath() path.addRoundedRect(border_rect, radius, radius) painter.setBrush(QtCore.Qt.NoBrush) painter.setPen(pen) painter.drawPath(path) painter.restore()
def paint(self, painter, option, widget): """ Draws the backdrop rect. Args: painter (QtGui.QPainter): painter used for drawing the item. option (QtGui.QStyleOptionGraphicsItem): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ painter.save() rect = self.boundingRect() color = (self.color[0], self.color[1], self.color[2], 50) painter.setBrush(QtGui.QColor(*color)) painter.setPen(QtCore.Qt.NoPen) painter.drawRect(rect) top_rect = QtCore.QRectF(0.0, 0.0, rect.width(), 20.0) painter.setBrush(QtGui.QColor(*self.color)) painter.setPen(QtCore.Qt.NoPen) painter.drawRect(top_rect) if self.backdrop_text: painter.setPen(QtGui.QColor(*self.text_color)) txt_rect = QtCore.QRectF(top_rect.x() + 5.0, top_rect.height() + 2.0, rect.width() - 5.0, rect.height()) painter.setPen(QtGui.QColor(*self.text_color)) painter.drawText(txt_rect, QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap, self.backdrop_text) if self.selected and NODE_SEL_COLOR: sel_color = [x for x in NODE_SEL_COLOR] sel_color[-1] = 10 painter.setBrush(QtGui.QColor(*sel_color)) painter.setPen(QtCore.Qt.NoPen) painter.drawRect(rect) txt_rect = QtCore.QRectF(top_rect.x(), top_rect.y() + 1.2, rect.width(), top_rect.height()) painter.setPen(QtGui.QColor(*self.text_color)) painter.drawText(txt_rect, QtCore.Qt.AlignCenter, self.name) path = QtGui.QPainterPath() path.addRect(rect) border_color = self.color if self.selected and NODE_SEL_BORDER_COLOR: border_color = NODE_SEL_BORDER_COLOR painter.setBrush(QtCore.Qt.NoBrush) painter.setPen(QtGui.QPen(QtGui.QColor(*border_color), 1)) painter.drawPath(path) painter.restore()
def paint(self, painter, option, widget): """ Draws the circular port. Args: painter (QtGui.QPainter): painter used for drawing the item. option (QtGui.QStyleOptionGraphicsItem): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ painter.save() rect = QtCore.QRectF(0.0, 0.8, self._width, self._height) path = QtGui.QPainterPath() path.addEllipse(rect) if self._hovered: color = QtGui.QColor(*PORT_HOVER_COLOR) border_color = QtGui.QColor(*PORT_HOVER_BORDER_COLOR) elif self.connected_pipes: color = QtGui.QColor(*PORT_ACTIVE_COLOR) border_color = QtGui.QColor(*PORT_ACTIVE_BORDER_COLOR) else: color = QtGui.QColor(*self.color) border_color = QtGui.QColor(*self.border_color) painter.setBrush(color) pen = QtGui.QPen(border_color, 1.5) painter.setPen(pen) painter.drawEllipse(self.boundingRect()) if self.connected_pipes and not self._hovered: painter.setBrush(border_color) w = self._width / 2.5 h = self._height / 2.5 rect = QtCore.QRectF(self.boundingRect().center().x() - w / 2, self.boundingRect().center().y() - h / 2, w, h) painter.drawEllipse(rect) elif self._hovered: if self.multi_connection: painter.setBrush(color) w = self._width / 1.8 h = self._height / 1.8 else: painter.setBrush(border_color) w = self._width / 3.5 h = self._height / 3.5 rect = QtCore.QRectF(self.boundingRect().center().x() - w / 2, self.boundingRect().center().y() - h / 2, w, h) painter.drawEllipse(rect) painter.restore()
def paint(self, painter, option, widget): """ Draws the slicer pipe. Args: painter (QtGui.QPainter): painter used for drawing the item. option (QtGui.QStyleOptionGraphicsItem): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ color = QtGui.QColor(*PIPE_SLICER_COLOR) p1 = self.path().pointAtPercent(0) p2 = self.path().pointAtPercent(1) size = 6.0 offset = size / 2 painter.save() painter.setRenderHint(painter.Antialiasing, True) font = painter.font() font.setPointSize(12) painter.setFont(font) text = 'slice' text_x = painter.fontMetrics().width(text) / 2 text_y = painter.fontMetrics().height() / 1.5 text_pos = QtCore.QPointF(p1.x() - text_x, p1.y() - text_y) text_color = QtGui.QColor(*PIPE_SLICER_COLOR) text_color.setAlpha(80) painter.setPen(QtGui.QPen(text_color, 1.5, QtCore.Qt.SolidLine)) painter.drawText(text_pos, text) painter.setPen(QtGui.QPen(color, 1.5, QtCore.Qt.DashLine)) painter.drawPath(self.path()) painter.setPen(QtGui.QPen(color, 1.5, QtCore.Qt.SolidLine)) painter.setBrush(color) rect = QtCore.QRectF(p1.x() - offset, p1.y() - offset, size, size) painter.drawEllipse(rect) rect = QtCore.QRectF(p2.x() - offset, p2.y() - offset, size, size) painter.drawEllipse(rect) painter.restore()
def mousePressEvent(self, event): if event.button() == QtCore.Qt.LeftButton: pos = event.scenePos() rect = QtCore.QRectF(pos.x() - 5, pos.y() - 5, 10, 10) item = self.scene().items(rect)[0] if isinstance(item, (PortItem, Pipe)): self.setFlag(self.ItemIsMovable, False) return if self.selected: return viewer = self.viewer() [n.setSelected(False) for n in viewer.selected_nodes()] self._nodes += self.get_nodes(False) [n.setSelected(True) for n in self._nodes]
def boundingRect(self): return QtCore.QRectF(0.0, 0.0, self._width, self._height)
def paint(self, painter, option, widget): """ Draws the overlay disabled X item on top of a node item. Args: painter (QtGui.QPainter): painter used for drawing the item. option (QtGui.QStyleOptionGraphicsItem): used to describe the parameters needed to draw. widget (QtWidgets.QWidget): not used. """ painter.save() margin = 20 rect = self.boundingRect() dis_rect = QtCore.QRectF(rect.left() - (margin / 2), rect.top() - (margin / 2), rect.width() + margin, rect.height() + margin) pen = QtGui.QPen(QtGui.QColor(*self.color), 8) pen.setCapStyle(QtCore.Qt.RoundCap) painter.setPen(pen) painter.drawLine(dis_rect.topLeft(), dis_rect.bottomRight()) painter.drawLine(dis_rect.topRight(), dis_rect.bottomLeft()) bg_color = QtGui.QColor(*self.color) bg_color.setAlpha(100) bg_margin = -0.5 bg_rect = QtCore.QRectF(dis_rect.left() - (bg_margin / 2), dis_rect.top() - (bg_margin / 2), dis_rect.width() + bg_margin, dis_rect.height() + bg_margin) painter.setPen(QtGui.QPen(QtGui.QColor(0, 0, 0, 0))) painter.setBrush(bg_color) painter.drawRoundedRect(bg_rect, 5, 5) pen = QtGui.QPen(QtGui.QColor(155, 0, 0, 255), 0.7) painter.setPen(pen) painter.drawLine(dis_rect.topLeft(), dis_rect.bottomRight()) painter.drawLine(dis_rect.topRight(), dis_rect.bottomLeft()) point_size = 4.0 point_pos = (dis_rect.topLeft(), dis_rect.topRight(), dis_rect.bottomLeft(), dis_rect.bottomRight()) painter.setBrush(QtGui.QColor(255, 0, 0, 255)) for p in point_pos: p.setX(p.x() - (point_size / 2)) p.setY(p.y() - (point_size / 2)) point_rect = QtCore.QRectF(p, QtCore.QSizeF(point_size, point_size)) painter.drawEllipse(point_rect) if self.text: font = painter.font() font.setPointSize(10) painter.setFont(font) font_metrics = QtGui.QFontMetrics(font) font_width = font_metrics.width(self.text) font_height = font_metrics.height() txt_w = font_width * 1.25 txt_h = font_height * 2.25 text_bg_rect = QtCore.QRectF((rect.width() / 2) - (txt_w / 2), (rect.height() / 2) - (txt_h / 2), txt_w, txt_h) painter.setPen(QtGui.QPen(QtGui.QColor(255, 0, 0), 0.5)) painter.setBrush(QtGui.QColor(*self.color)) painter.drawRoundedRect(text_bg_rect, 2, 2) text_rect = QtCore.QRectF((rect.width() / 2) - (font_width / 2), (rect.height() / 2) - (font_height / 2), txt_w * 2, font_height * 2) painter.setPen(QtGui.QPen(QtGui.QColor(255, 0, 0), 1)) painter.drawText(text_rect, self.text) painter.restore()
def boundingRect(self): return QtCore.QRectF(0.5, 0.5, self._size, self._size)