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 KDCHARTRINGDIAGRAM_H
00031 #define KDCHARTRINGDIAGRAM_H
00032
00033 #include "KDChartAbstractPieDiagram.h"
00034
00035 namespace KDChart {
00036
00040 class KDCHART_EXPORT RingDiagram : public AbstractPieDiagram
00041 {
00042 Q_OBJECT
00043
00044 Q_DISABLE_COPY( RingDiagram )
00045 KDCHART_DECLARE_DERIVED_DIAGRAM( RingDiagram, PolarCoordinatePlane )
00046
00047 public:
00048 explicit RingDiagram(
00049 QWidget* parent = 0, PolarCoordinatePlane* plane = 0 );
00050 virtual ~RingDiagram();
00051
00052 protected:
00053
00055 virtual void paint ( PaintContext* paintContext );
00056 public:
00058 virtual void resize ( const QSizeF& area );
00059
00060
00062 virtual double valueTotals () const;
00064 virtual double numberOfValuesPerDataset() const;
00065 virtual double numberOfDatasets() const;
00067 virtual double numberOfGridRings() const;
00068
00069 double valueTotals( int dataset ) const;
00070
00071 virtual RingDiagram * clone() const;
00072
00076 bool compare( const RingDiagram* other ) const;
00077
00078 void setRelativeThickness( bool relativeThickness );
00079 bool relativeThickness() const;
00080
00081 virtual void setExpandWhenExploded( bool expand );
00082 virtual bool expandWhenExploded() const;
00083
00084 protected:
00086 virtual const QPair<QPointF, QPointF> calculateDataBoundaries() const;
00087 void paintEvent( QPaintEvent* );
00088 void resizeEvent( QResizeEvent* );
00089
00090 private:
00091
00092 void drawOnePie( QPainter* painter,
00093 uint dataset, uint pie,
00094 qreal granularity );
00095 void drawPieSurface( QPainter* painter,
00096 uint dataset, uint pie,
00097 qreal granularity );
00098 QPointF pointOnCircle( const QRectF& rect, int dataset, int pie, bool outer, qreal angle, qreal totalGapFactor, qreal totalExplodeFactor );
00099
00100 };
00101
00102 }
00103
00104 #endif // KDCHARTRINGDIAGRAM_H