1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2 * QwtPolar Widget Library
3 * Copyright (C) 2008 Uwe Rathmann
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the Qwt License, Version 1.0
7 *****************************************************************************/
8
9 #ifndef QWT_POLAR_CURVE_H
10 #define QWT_POLAR_CURVE_H
11
12 #include "qwt_polar_global.h"
13 #include "qwt_polar_item.h"
14 #include <qwt_point_polar.h>
15 #include <qwt_series_data.h>
16
17 class QPainter;
18 class QwtSymbol;
19 class QwtCurveFitter;
20
21 /*!
22 \brief An item, that represents a series of points
23
24 A curve is the representation of a series of points in polar coordinates.
25 The points are connected to the curve using the abstract QwtData interface.
26
27 \sa QwtPolarPlot, QwtSymbol, QwtScaleMap
28 */
29
30 class QWT_POLAR_EXPORT QwtPolarCurve: public QwtPolarItem
31 {
32 public:
33 /*!
34 Curve styles.
35 \sa setStyle(), style()
36 */
37 enum CurveStyle
38 {
39 //! Don't draw a curve. Note: This doesn't affect the symbols.
40 NoCurve,
41
42 /*!
43 Connect the points with straight lines. The lines might
44 be interpolated depending on the 'Fitted' attribute. Curve
45 fitting can be configured using setCurveFitter().
46 */
47 Lines,
48
49 //! Values > 100 are reserved for user specific curve styles
50 UserCurve = 100
51 };
52
53 /*!
54 \brief Attributes how to represent the curve on the legend
55
56 If none of the flags is activated QwtPlotCurve tries to find
57 a color representing the curve and paints a rectangle with it.
58 In the default setting all attributes are off.
59
60 \sa setLegendAttribute(), testLegendAttribute()
61 */
62
63 enum LegendAttribute
64 {
65 /*!
66 If the curveStyle() is not NoCurve a line is painted with the
67 curvePen().
68 */
69 LegendShowLine = 0x01,
70
71 //! If the curve has a valid symbol it is painted.
72 LegendShowSymbol = 0x02
73 };
74
75 //! Legend attributes
76 typedef QFlags<LegendAttribute> LegendAttributes;
77
78
79 explicit QwtPolarCurve();
80 explicit QwtPolarCurve( const QwtText &title );
81 explicit QwtPolarCurve( const QString &title );
82
83 virtual ~QwtPolarCurve();
84
85 virtual int rtti() const;
86
87 void setLegendAttribute( LegendAttribute, bool on = true );
88 bool testLegendAttribute( LegendAttribute ) const;
89
90 void setData( QwtSeriesData<QwtPointPolar> *data );
91 const QwtSeriesData<QwtPointPolar> *data() const;
92
93 size_t dataSize() const;
94 QwtPointPolar sample( int i ) const;
95
96 void setPen( const QPen & );
97 const QPen &pen() const;
98
99 void setStyle( CurveStyle style );
100 CurveStyle style() const;
101
102 void setSymbol( QwtSymbol * );
103 const QwtSymbol *symbol() const;
104
105 void setCurveFitter( QwtCurveFitter * );
106 QwtCurveFitter *curveFitter() const;
107
108 virtual void draw( QPainter *p,
109 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
110 const QPointF &pole, double radius,
111 const QRectF &canvasRect ) const;
112
113 virtual void draw( QPainter *p,
114 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
115 const QPointF &pole, int from, int to ) const;
116
117 virtual QwtInterval boundingInterval( int scaleId ) const;
118
119 virtual QwtGraphic legendIcon( int index, const QSizeF & ) const;
120
121 protected:
122
123 void init();
124
125 virtual void drawCurve( QPainter *, int style,
126 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
127 const QPointF &pole, int from, int to ) const;
128
129 virtual void drawSymbols( QPainter *, const QwtSymbol &,
130 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
131 const QPointF &pole, int from, int to ) const;
132
133 void drawLines( QPainter *,
134 const QwtScaleMap &azimuthMap, const QwtScaleMap &radialMap,
135 const QPointF &pole, int from, int to ) const;
136
137 private:
138 QwtSeriesData<QwtPointPolar> *d_series;
139
140 class PrivateData;
141 PrivateData *d_data;
142 };
143
144 //! \returns the the curve data
data()145 inline const QwtSeriesData<QwtPointPolar> *QwtPolarCurve::data() const
146 {
147 return d_series;
148 }
149
150 /*!
151 \param i index
152 \returns point at position i
153 */
sample(int i)154 inline QwtPointPolar QwtPolarCurve::sample( int i ) const
155 {
156 return d_series->sample( i );
157 }
158
159 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtPolarCurve::LegendAttributes )
160
161 #endif
162