Exemplo n.º 1
0
 def drawItem(self, item, painter, option):
     """
     Draws the inputed item as a bar graph.
     
     :param      item    | <XChartDatasetItem>
                 painter | <QPainter>
                 option  | <QStyleOptionGraphicsItem>
     """
     dataset = item.dataset()
     
     painter.save()
     painter.setRenderHint(painter.Antialiasing)
     
     pen = QPen(dataset.color())
     pen.setWidth(3)
     painter.setPen(pen)
     painter.setBrush(Qt.NoBrush)
     painter.drawPath(item.path())
     
     if self.showPoints():
         palette = QApplication.palette()
         pen = QPen(palette.color(palette.Base))
         pen.setWidth(2)
         
         painter.setBrush(dataset.color())
         painter.setPen(pen)
         
         for point in item.buildData('ellipses', []):
             painter.drawEllipse(point,
                                 self.pointRadius(),
                                 self.pointRadius())
     
     painter.restore()
Exemplo n.º 2
0
    def drawAxis(self, painter, rect, axis):
        """
        Draws the axis for the given painter.
        
        :param      painter | <QPainter>
                    rect    | <QRect>
        """
        if not axis:
            return

        # draw the axis lines
        painter.save()
        pen = QPen(self.axisColor())
        pen.setWidth(3)
        painter.setPen(pen)

        # draw the vertical line
        if axis.orientation() == Qt.Vertical:
            line = QLineF(rect.right(), rect.top(), rect.right(),
                          rect.bottom())

            painter.drawLine(line)
            painter.setFont(axis.labelFont())
            for y, height, label in self._buildData.get('grid_h_labels', []):
                painter.drawText(0, y - height / 2.0,
                                 rect.width() - 3, height,
                                 Qt.AlignRight | Qt.AlignVCenter, label)

            painter.translate(0, rect.center().y())
            painter.rotate(-90)

            painter.setFont(axis.titleFont())
            painter.drawText(-rect.height() / 2, 0, rect.height(),
                             rect.width(), Qt.AlignHCenter | Qt.AlignTop,
                             axis.title())

        # draw the horizontal line
        else:
            line = QLineF(rect.left(), rect.top(), rect.right(), rect.top())

            painter.setFont(axis.titleFont())
            painter.drawText(rect, Qt.AlignHCenter | Qt.AlignBottom,
                             axis.title())

            painter.drawLine(line)
            painter.setFont(axis.labelFont())
            for x, width, label in self._buildData.get('grid_v_labels', []):
                painter.drawText(x - width / 2.0, 3, width,
                                 rect.height() - 6,
                                 Qt.AlignHCenter | Qt.AlignTop, label)
        painter.restore()
Exemplo n.º 3
0
 def drawAxis(self, painter, rect, axis):
     """
     Draws the axis for the given painter.
     
     :param      painter | <QPainter>
                 rect    | <QRect>
     """
     if not axis:
         return
     
     # draw the axis lines
     painter.save()
     pen = QPen(self.axisColor())
     pen.setWidth(3)
     painter.setPen(pen)
     
     # draw the vertical line
     if axis.orientation() == Qt.Vertical:
         line = QLineF(rect.right(), rect.top(),
                       rect.right(), rect.bottom())
         
         painter.drawLine(line)
         painter.setFont(axis.labelFont())
         for y, height, label in self._buildData.get('grid_h_labels', []):
             painter.drawText(0, y - height / 2.0, rect.width() - 3, height,
                              Qt.AlignRight | Qt.AlignVCenter, label)
         
         painter.translate(0, rect.center().y())
         painter.rotate(-90)
         
         painter.setFont(axis.titleFont())
         painter.drawText(-rect.height()/2, 0, rect.height(), rect.width(),
                          Qt.AlignHCenter | Qt.AlignTop, axis.title())
         
     # draw the horizontal line
     else:
         line = QLineF(rect.left(), rect.top(),
                       rect.right(), rect.top())
         
         painter.setFont(axis.titleFont())
         painter.drawText(rect,
                          Qt.AlignHCenter | Qt.AlignBottom,
                          axis.title())
         
         painter.drawLine(line)
         painter.setFont(axis.labelFont())
         for x, width, label in self._buildData.get('grid_v_labels', []):
             painter.drawText(x - width / 2.0, 3, width, rect.height() - 6,
                              Qt.AlignHCenter | Qt.AlignTop, label)
     painter.restore()
Exemplo n.º 4
0
 def drawItem(self, item, painter, option):
     """
     Draws the inputed item as a bar graph.
     
     :param      item    | <XChartDatasetItem>
                 painter | <QPainter>
                 option  | <QStyleOptionGraphicsItem>
     """
     dataset = item.dataset()
     
     painter.save()
     painter.setRenderHint(painter.Antialiasing)
     
     center = item.buildData('center')
     radius = item.buildData('radius')
     
     if int(option.state) & QStyle.State_MouseOver != 0:
         alpha = 20
         mouse_over = True
     else:
         alpha = 0
         mouse_over = False
     
     for value, subpath in item.buildData('subpaths', []):
         clr = dataset.color(value)
         
         bg = clr.lighter(110)
         bg.setAlpha(alpha + 100)
         painter.setBrush(bg)
         
         if mouse_over:
             scale = 1.08
             dx = (center.x() / scale) - center.x()
             dy = (center.y() / scale) - center.y()
             
             painter.save()
             painter.scale(scale, scale)
             painter.translate(dx, dy)
             painter.setPen(Qt.NoPen)
             painter.drawPath(subpath)
             painter.restore()
         
         pen = QPen(clr)
         pen.setWidth(0.5)
         painter.setPen(pen)
         
         painter.drawPath(subpath)
         
     painter.restore()
Exemplo n.º 5
0
    def drawItem(self, item, painter, option):
        """
        Draws the inputed item as a bar graph.
        
        :param      item    | <XChartDatasetItem>
                    painter | <QPainter>
                    option  | <QStyleOptionGraphicsItem>
        """
        dataset = item.dataset()

        painter.save()
        painter.setRenderHint(painter.Antialiasing)

        center = item.buildData('center')
        radius = item.buildData('radius')

        if int(option.state) & QStyle.State_MouseOver != 0:
            alpha = 20
            mouse_over = True
        else:
            alpha = 0
            mouse_over = False

        for value, subpath in item.buildData('subpaths', []):
            clr = dataset.color(value)

            bg = clr.lighter(110)
            bg.setAlpha(alpha + 100)
            painter.setBrush(bg)

            if mouse_over:
                scale = 1.08
                dx = (center.x() / scale) - center.x()
                dy = (center.y() / scale) - center.y()

                painter.save()
                painter.scale(scale, scale)
                painter.translate(dx, dy)
                painter.setPen(Qt.NoPen)
                painter.drawPath(subpath)
                painter.restore()

            pen = QPen(clr)
            pen.setWidth(0.5)
            painter.setPen(pen)

            painter.drawPath(subpath)

        painter.restore()
Exemplo n.º 6
0
    def drawAxis(self, painter):
        """
        Draws the axis for this system.
        """
        # draw the axis lines
        pen = QPen(self.axisColor())
        pen.setWidth(4)
        painter.setPen(pen)
        painter.drawLines(self._buildData['axis_lines'])

        # draw the notches
        for rect, text in self._buildData['grid_h_notches']:
            painter.drawText(rect, Qt.AlignTop | Qt.AlignRight, text)

        for rect, text in self._buildData['grid_v_notches']:
            painter.drawText(rect, Qt.AlignCenter, text)
Exemplo n.º 7
0
 def drawAxis( self, painter ):
     """
     Draws the axis for this system.
     """
     # draw the axis lines
     pen = QPen(self.axisColor())
     pen.setWidth(4)
     painter.setPen(pen)
     painter.drawLines(self._buildData['axis_lines'])
     
     # draw the notches
     for rect, text in self._buildData['grid_h_notches']:
         painter.drawText(rect, Qt.AlignTop | Qt.AlignRight, text)
     
     for rect, text in self._buildData['grid_v_notches']:
         painter.drawText(rect, Qt.AlignCenter, text)
Exemplo n.º 8
0
 def drawItem(self, item, painter, option):
     """
     Draws the inputed item as a bar graph.
     
     :param      item    | <XChartDatasetItem>
                 painter | <QPainter>
                 option  | <QStyleOptionGraphicsItem>
     """
     dataset = item.dataset()
     
     painter.save()
     painter.setRenderHint(painter.Antialiasing)
     
     pen = QPen(dataset.color())
     pen.setWidth(0.75)
     painter.setPen(pen)
     
     for path in item.buildData('subpaths', []):
         gradient = QLinearGradient()
         
         clr = QColor(dataset.color())
         clr.setAlpha(220)
         
         gradient.setColorAt(0.0,  clr.lighter(180))
         gradient.setColorAt(0.1,  clr.lighter(160))
         gradient.setColorAt(0.25, clr.lighter(140))
         gradient.setColorAt(1.0,  clr.lighter(125))
         
         if self.orientation() == Qt.Vertical:
             gradient.setStart(0, path.boundingRect().bottom())
             gradient.setFinalStop(0, path.boundingRect().top())
         else:
             gradient.setStart(path.boundingRect().left(), 0)
             gradient.setFinalStop(path.boundingRect().right(), 0)
         
         painter.setBrush(gradient)
         painter.drawPath(path)
     
     painter.restore()
Exemplo n.º 9
0
    def drawItem(self, item, painter, option):
        """
        Draws the inputed item as a bar graph.
        
        :param      item    | <XChartDatasetItem>
                    painter | <QPainter>
                    option  | <QStyleOptionGraphicsItem>
        """
        dataset = item.dataset()

        painter.save()
        painter.setRenderHint(painter.Antialiasing)

        pen = QPen(dataset.color())
        pen.setWidth(0.75)
        painter.setPen(pen)

        for path in item.buildData('subpaths', []):
            gradient = QLinearGradient()

            clr = QColor(dataset.color())
            clr.setAlpha(220)

            gradient.setColorAt(0.0, clr.lighter(180))
            gradient.setColorAt(0.1, clr.lighter(160))
            gradient.setColorAt(0.25, clr.lighter(140))
            gradient.setColorAt(1.0, clr.lighter(125))

            if self.orientation() == Qt.Vertical:
                gradient.setStart(0, path.boundingRect().bottom())
                gradient.setFinalStop(0, path.boundingRect().top())
            else:
                gradient.setStart(path.boundingRect().left(), 0)
                gradient.setFinalStop(path.boundingRect().right(), 0)

            painter.setBrush(gradient)
            painter.drawPath(path)

        painter.restore()
Exemplo n.º 10
0
 def paint( self, painter, option, widget ):
     """
     Paints this item.
     
     :param      painter | <QPainter>
                 option  | <QGraphicsOption>
                 widget  | <QWidget>
     """
     painter.save()
     pen = QPen(self.color())
     pen.setWidth(2)
     painter.setPen(pen)
     painter.drawPath(self._basePath)
     painter.setRenderHint(painter.Antialiasing)
     
     
     pen.setColor(QColor('white'))
     painter.setPen(pen)
     painter.setBrush(self.color())
     for ellipse in self._ellipses:
         painter.drawEllipse(ellipse, 6, 6)
     
     painter.restore()
Exemplo n.º 11
0
    def paint(self, painter, option, widget):
        """
        Draws this item with the inputed painter.
        
        :param      painter | <QPainter>
                    rect    | <QRect>
        """
        if self._dirty:
            self.rebuild()

        scene = self.scene()
        if not scene:
            return

        grid = scene.gridRect()
        typ = self.chartType()

        # draw the line chart
        if typ == XChartScene.Type.Line:
            painter.setRenderHint(painter.Antialiasing)

            # draw the path area
            area = self._buildData.get('path_area')
            if area and self.isShaded():
                clr = QColor(self.color())

                clr.setAlpha(120)
                painter.setPen(Qt.NoPen)
                painter.setBrush(clr)

                painter.drawPath(area)

            # draw the line data
            pen = QPen(self.color())
            pen.setWidth(2)

            painter.setPen(pen)
            painter.setBrush(Qt.NoBrush)

            painter.drawPath(self.path())

            if (self.showPointsInLine()):
                palette = QApplication.palette()
                pen = QPen(palette.color(palette.Base))
                pen.setWidth(2)

                painter.setBrush(self.color())
                painter.setPen(pen)

                for point in self._ellipses:
                    painter.drawEllipse(point, self.pointRadius(),
                                        self.pointRadius())

        # draw a bar chart
        elif typ == XChartScene.Type.Bar:
            painter.setRenderHint(painter.Antialiasing)

            pen = QPen(self.color())
            pen.setWidth(1)
            painter.setPen(pen)

            for key, value, sub_path in self._subpaths:
                gradient = QLinearGradient()

                clr = QColor(self.color())

                if (sub_path != self._hoveredPath):
                    clr.setAlpha(130)

                gradient.setColorAt(0.0, clr.lighter(140))
                gradient.setColorAt(0.1, clr.lighter(120))
                gradient.setColorAt(0.25, clr.lighter(110))
                gradient.setColorAt(1.0, clr.lighter(105))

                if (self.orientation() == Qt.Horizontal):
                    gradient.setStart(0, sub_path.boundingRect().top())
                    gradient.setFinalStop(0, sub_path.boundingRect().bottom())
                else:
                    gradient.setStart(sub_path.boundingRect().left(), 0)
                    gradient.setFinalStop(sub_path.boundingRect().right(), 0)

                painter.setBrush(gradient)
                painter.drawPath(sub_path)

        # draw a simple pie chart (calculated by scene)
        elif typ == XChartScene.Type.Pie:
            painter.setRenderHint(painter.Antialiasing)

            center = self.pieCenter()
            radius = self.radius()

            for key, value, sub_path in self._subpaths:
                clr = self.keyColor(key)

                gradient = QRadialGradient(QPointF(0, 0), radius)

                a = QColor(clr.lighter(140))
                b = QColor(clr.lighter(110))

                a.setAlpha(40)
                b.setAlpha(80)

                # look for mouse over
                if (sub_path == self._hoveredPath):
                    a.setAlpha(100)
                    b.setAlpha(200)

                gradient.setColorAt(0, a)
                gradient.setColorAt(1, b)

                pen = QPen(clr)
                pen.setWidth(1)

                painter.setBrush(gradient)
                painter.setPen(pen)

                painter.drawPath(sub_path)
Exemplo n.º 12
0
 def paint( self, painter, option, widget ):
     """
     Draws this item with the inputed painter.
     
     :param      painter | <QPainter>
                 rect    | <QRect>
     """
     if self._dirty:
         self.rebuild()
     
     scene   = self.scene()
     if not scene:
         return
     
     grid    = scene.gridRect()
     typ     = self.chartType()
     
     # draw the line chart
     if typ == XChartScene.Type.Line:
         painter.setRenderHint(painter.Antialiasing)
         
         # draw the path area
         area = self._buildData.get('path_area')
         if area and self.isShaded():
             clr   = QColor(self.color())
             
             clr.setAlpha(120)
             painter.setPen(Qt.NoPen)
             painter.setBrush(clr)
             
             painter.drawPath(area)
         
         # draw the line data
         pen = QPen(self.color())
         pen.setWidth(2)
         
         painter.setPen(pen)
         painter.setBrush(Qt.NoBrush)
         
         painter.drawPath(self.path())
         
         if ( self.showPointsInLine() ):
             palette = QApplication.palette()
             pen = QPen(palette.color(palette.Base))
             pen.setWidth(2)
             
             painter.setBrush(self.color())
             painter.setPen(pen)
             
             for point in self._ellipses:
                 painter.drawEllipse(point, 
                                     self.pointRadius(), 
                                     self.pointRadius())
     
     # draw a bar chart
     elif typ == XChartScene.Type.Bar:
         painter.setRenderHint(painter.Antialiasing)
         
         pen = QPen(self.color())
         pen.setWidth(1)
         painter.setPen(pen)
         
         for key, value, sub_path in self._subpaths:
             gradient = QLinearGradient()
             
             clr = QColor(self.color())
             
             if ( sub_path != self._hoveredPath ):
                 clr.setAlpha(130)
             
             gradient.setColorAt(0.0,  clr.lighter(140))
             gradient.setColorAt(0.1,  clr.lighter(120))
             gradient.setColorAt(0.25, clr.lighter(110))
             gradient.setColorAt(1.0,  clr.lighter(105))
             
             if ( self.orientation() == Qt.Horizontal ):
                 gradient.setStart(0, sub_path.boundingRect().top())
                 gradient.setFinalStop(0, sub_path.boundingRect().bottom())
             else:
                 gradient.setStart(sub_path.boundingRect().left(), 0)
                 gradient.setFinalStop(sub_path.boundingRect().right(), 0)
             
             painter.setBrush(gradient)
             painter.drawPath(sub_path)
     
     # draw a simple pie chart (calculated by scene)
     elif typ == XChartScene.Type.Pie:
         painter.setRenderHint(painter.Antialiasing)
         
         center   = self.pieCenter()
         radius   = self.radius()
         
         for key, value, sub_path in self._subpaths:
             clr = self.keyColor(key)
             
             gradient = QRadialGradient(QPointF(0, 0), radius)
             
             a = QColor(clr.lighter(140))
             b = QColor(clr.lighter(110))
             
             a.setAlpha(40)
             b.setAlpha(80)
             
             # look for mouse over
             if ( sub_path == self._hoveredPath ):
                 a.setAlpha(100)
                 b.setAlpha(200)
             
             gradient.setColorAt(0, a)
             gradient.setColorAt(1, b)
             
             pen = QPen(clr)
             pen.setWidth(1)
             
             painter.setBrush(gradient)
             painter.setPen(pen)
             
             painter.drawPath(sub_path)