Esempio n. 1
0
    def paint(self, painter, option, widget):
        # Paint background
        brush = QBrush()
        brush.setStyle(Qt.SolidPattern)
        brush.setColor(self.bgcolor)
        painter.fillRect(self.rect(), brush)
        # Paint border
        border_pen = QPen()
        border_pen.setBrush(self.border_color)
        border_pen.setStyle(Qt.SolidLine)
        border_pen.setWidth(self.border_width)
        painter.setPen(border_pen)
        painter.drawRect(self.rect())
        rect = self.geometry()
        # Create arrows
        arrow_scale = 0.25
        arrow_width = rect.width() * arrow_scale
        arrow_height = arrow_width * 0.8
        arrow_margin = (rect.width() - arrow_width) / 2.0

        brush.setColor(self.label_color)
        painter.setPen(Qt.NoPen)
        painter.setBrush(brush)
        arrow = None

        if self.topBand == self.dest_band_item:
            # Draw pointing up
            arrow = QPolygon([QPoint(0, arrow_height), QPoint(arrow_width, arrow_height), QPoint(arrow_width / 2.0, 0)])
            arrow.translate(self.rect().x() + arrow_margin, self.rect().y() + 1)
        else:
            # Draw pointing down
            arrow = QPolygon([QPoint(0, 0), QPoint(arrow_width, 0), QPoint(arrow_width / 2.0, arrow_height)])
            arrow.translate(self.rect().x() + arrow_margin, self.rect().y() + rect.height() - arrow_height)
        painter.drawPolygon(arrow)

        # Label
        painter.setPen(self.label_color)
        painter.rotate(-90)
        fm = painter.fontMetrics()
        elided = fm.elidedText(self.label, Qt.ElideRight, rect.height())
        twidth = fm.width(elided)
        painter.drawText(-twidth - (rect.height() - twidth) / 2, rect.width() - 2, elided)