Пример #1
0
    def paint(self, painter, opts, index):
        currentData = index.data(self._role)
        try:
            ratio = float(currentData)
        except:
            super(ResourceDelegate, self).paint(painter, opts, index)
            return

        text = "%0.2f%%" % (ratio * 100)
        opt = QtGui.QStyleOptionViewItemV4(opts)
        opt.displayAlignment = QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter

        grad = QtGui.QLinearGradient(opt.rect.topLeft(), opt.rect.topRight())
        # darkEnd = QtCore.Qt.transparent
        darkEnd = self.COLOR_BG
        end = darkEnd

        if ratio == 1:
            darkEnd = self.COLOR_OK
            end = darkEnd

        elif ratio <= self._crit:
            darkEnd = self.COLOR_CRITICAL
            end = self.COLOR_CRITICAL

        elif ratio <= self._warn:
            darkEnd = self.COLOR_WARN
            end = self.COLOR_WARN

        grad.setColorAt(0.0, self.COLOR_OK)
        grad.setColorAt(min(ratio, 1.0), self.COLOR_OK)
        grad.setColorAt(min(ratio + .01, 1.0), end)
        grad.setColorAt(1.0, darkEnd)

        self.drawBackground(painter, opt, index)
        painter.fillRect(opt.rect, QtGui.QBrush(grad))
        self.drawDisplay(painter, opt, opt.rect, text)

        state_bg = index.data(QtCore.Qt.BackgroundRole)
        if state_bg:
            painter.setBrush(QtCore.Qt.NoBrush)
            pen = QtGui.QPen(state_bg)
            pen.setWidth(2)
            painter.setPen(pen)
            painter.drawRect(opt.rect)
Пример #2
0
    def paint(self, painter, option, index):

        if not index.isValid():
            QtGui.QStyledItemDelegate.paint(self, painter, option, index)
            return

        ## Broken in PySide.
        opt = QtGui.QStyleOptionViewItemV4(option)
        self.initStyleOption(opt, index)

        # Broken in pyside 1.1.2
        #if opt.state & QtGui.QStyle.State_Selected:
        #    painter.fillRect(opt.rect, opt.palette.highlight())

        rect = opt.rect
        rect.adjust(self.Margins[0], self.Margins[1], -self.Margins[2],
                    -self.Margins[3])
        data = index.data()

        painter.save()
        painter.setRenderHints(painter.HighQualityAntialiasing
                               | painter.SmoothPixmapTransform
                               | painter.Antialiasing)

        painter.setPen(self.__PEN)

        if data[1] == 0:
            painter.setBrush(self.__C1)
            painter.drawRoundedRect(rect, 3, 3)
        else:
            ratio = data[0] / float(data[1])
            painter.setBrush(self.__C1)
            painter.drawRoundedRect(rect, 3, 3)
            rect.setWidth(ratio * rect.width())
            painter.setBrush(self.__C2)
            painter.drawRoundedRect(rect, 3, 3)
        painter.restore()