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 KDCHART_EXPORT PieDiagram : public AbstractPieDiagram
00038 {
00039 Q_OBJECT
00040
00041 Q_DISABLE_COPY( PieDiagram )
00042 KDCHART_DECLARE_DERIVED_DIAGRAM( PieDiagram, PolarCoordinatePlane )
00043
00044 public:
00045 explicit PieDiagram(
00046 QWidget* parent = 0, PolarCoordinatePlane* plane = 0 );
00047 virtual ~PieDiagram();
00048
00049 protected:
00050
00052 virtual void paint ( PaintContext* paintContext );
00053
00054 public:
00056 virtual void resize ( const QSizeF& area );
00057
00058
00060 virtual double valueTotals () const;
00062 virtual double numberOfValuesPerDataset() const;
00064 virtual double numberOfGridRings() const;
00065
00066 virtual PieDiagram * clone() const;
00067
00068 protected:
00070 virtual const QPair<QPointF, QPointF> calculateDataBoundaries() const;
00071 void paintEvent( QPaintEvent* );
00072 void resizeEvent( QResizeEvent* );
00073
00074 private:
00075 QRectF piePosition( uint dataset, uint pie ) const;
00076 void drawOnePie( QPainter* painter,
00077 uint dataset, uint pie,
00078 qreal granularity,
00079 qreal threeDPieHeight );
00080 void drawPieSurface( QPainter* painter,
00081 uint dataset, uint pie,
00082 qreal granularity );
00083 void draw3DEffect( QPainter* painter,
00084 const QRectF& drawPosition,
00085 uint dataset, uint pie,
00086 qreal granularity,
00087 const ThreeDPieAttributes& threeDAttrs,
00088 bool );
00089 void drawStraightEffectSegment( QPainter* painter,
00090 const QRectF& rect,
00091 qreal threeDHeight,
00092 qreal angle );
00093 void drawUpperBrinkEffect( QPainter* painter,
00094 const QRectF& rect,
00095 qreal angle );
00096 void drawArcEffectSegment( QPainter* painter,
00097 const QRectF& rect,
00098 qreal threeDHeight,
00099 qreal startAngle,
00100 qreal endAngle,
00101 qreal granularity );
00102 void drawArcUpperBrinkEffectSegment( QPainter* painter,
00103 const QRectF& rect,
00104 qreal startAngle,
00105 qreal endAngle,
00106 qreal granularity );
00107 uint findPieAt( qreal angle, int columnCount );
00108 uint findLeftPie( uint pie, int columnCount );
00109 uint findRightPie( uint pie, int columnCount );
00110 QPointF pointOnCircle( const QRectF& rect, qreal angle );
00111 };
00112
00113 }
00114 #endif // KDCHARTPIEDIAGRA_H