00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef KDCHARTPIEDIAGRAM_H
00031 #define KDCHARTPIEDIAGRAM_H
00032
00033 #include "KDChartAbstractPieDiagram.h"
00034
00035 namespace KDChart {
00036
00037 class DataValueTextInfo;
00038 typedef class QVector<DataValueTextInfo> DataValueTextInfoList;
00039
00043 class KDCHART_EXPORT PieDiagram : public AbstractPieDiagram
00044 {
00045 Q_OBJECT
00046
00047 Q_DISABLE_COPY( PieDiagram )
00048 KDCHART_DECLARE_DERIVED_DIAGRAM( PieDiagram, PolarCoordinatePlane )
00049
00050 public:
00051 explicit PieDiagram(
00052 QWidget* parent = 0, PolarCoordinatePlane* plane = 0 );
00053 virtual ~PieDiagram();
00054
00055 protected:
00056
00058 virtual void paint ( PaintContext* paintContext );
00059 void paintInternal(PaintContext* paintContext, QRectF& textBoundingRect);
00060
00061 public:
00063 virtual void resize ( const QSizeF& area );
00064
00065
00067 virtual double valueTotals () const;
00069 virtual double numberOfValuesPerDataset() const;
00071 virtual double numberOfGridRings() const;
00072
00073 virtual PieDiagram * clone() const;
00074
00075 protected:
00077 virtual const QPair<QPointF, QPointF> calculateDataBoundaries() const;
00078 void paintEvent( QPaintEvent* );
00079 void resizeEvent( QResizeEvent* );
00080
00081 private:
00082 QRectF piePosition( uint dataset, uint pie ) const;
00083 void drawOnePie( QPainter* painter,
00084 DataValueTextInfoList* list,
00085 uint dataset, uint pie,
00086 qreal granularity,
00087 qreal threeDPieHeight );
00088 void drawPieSurface( QPainter* painter,
00089 DataValueTextInfoList* list,
00090 uint dataset, uint pie,
00091 qreal granularity );
00092 void draw3DEffect( QPainter* painter,
00093 const QRectF& drawPosition,
00094 uint dataset, uint pie,
00095 qreal granularity,
00096 const ThreeDPieAttributes& threeDAttrs,
00097 bool );
00098 void drawStraightEffectSegment( QPainter* painter,
00099 const QRectF& rect,
00100 qreal threeDHeight,
00101 qreal angle );
00102 void drawUpperBrinkEffect( QPainter* painter,
00103 const QRectF& rect,
00104 qreal angle );
00105 void drawArcEffectSegment( QPainter* painter,
00106 const QRectF& rect,
00107 qreal threeDHeight,
00108 qreal startAngle,
00109 qreal endAngle,
00110 qreal granularity );
00111 void drawArcUpperBrinkEffectSegment( QPainter* painter,
00112 const QRectF& rect,
00113 qreal startAngle,
00114 qreal endAngle,
00115 qreal granularity );
00116 uint findPieAt( qreal angle, int columnCount );
00117 uint findLeftPie( uint pie, int columnCount );
00118 uint findRightPie( uint pie, int columnCount );
00119 QPointF pointOnCircle( const QRectF& rect, qreal angle );
00120 };
00121
00122 }
00123 #endif // KDCHARTPIEDIAGRAM_H