00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_PLOT_SERIES_ITEM_H
00011 #define QWT_PLOT_SERIES_ITEM_H
00012
00013 #include "qwt_global.h"
00014 #include "qwt_plot_item.h"
00015 #include "qwt_scale_div.h"
00016 #include "qwt_series_data.h"
00017
00018 class QWT_EXPORT QwtPlotAbstractSeriesItem: public QwtPlotItem
00019 {
00020 public:
00021 explicit QwtPlotAbstractSeriesItem(const QString &title = QString::null);
00022 explicit QwtPlotAbstractSeriesItem(const QwtText &title);
00023
00024 virtual ~QwtPlotAbstractSeriesItem();
00025
00026 void setOrientation(Qt::Orientation);
00027 Qt::Orientation orientation() const;
00028
00029 virtual void draw(QPainter *p,
00030 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00031 const QRectF &) const;
00032
00033 virtual void drawSeries(QPainter *,
00034 const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00035 const QRectF &, int from, int to) const = 0;
00036
00037 private:
00038 class PrivateData;
00039 PrivateData *d_data;
00040 };
00041
00042 template <typename T>
00043 class QwtPlotSeriesItem: public QwtPlotAbstractSeriesItem
00044 {
00045 public:
00046 explicit QwtPlotSeriesItem<T>(const QString &title = QString::null);
00047 explicit QwtPlotSeriesItem<T>(const QwtText &title);
00048
00049 virtual ~QwtPlotSeriesItem<T>();
00050
00051 void setData(const QwtSeriesData<T> &);
00052
00053 QwtSeriesData<T> &data();
00054 const QwtSeriesData<T> &data() const;
00055
00056 int dataSize() const;
00057 T sample(int i) const;
00058
00059 virtual QRectF boundingRect() const;
00060 virtual void updateScaleDiv(const QwtScaleDiv &,
00061 const QwtScaleDiv &);
00062
00063 protected:
00064 QwtSeriesData<T> *d_series;
00065 };
00066
00067 template <typename T>
00068 QwtPlotSeriesItem<T>::QwtPlotSeriesItem(const QString &title):
00069 QwtPlotAbstractSeriesItem(QwtText(title)),
00070 d_series(NULL)
00071 {
00072 }
00073
00074 template <typename T>
00075 QwtPlotSeriesItem<T>::QwtPlotSeriesItem(
00076 const QwtText &title):
00077 QwtPlotAbstractSeriesItem(title),
00078 d_series(NULL)
00079 {
00080 }
00081
00082 template <typename T>
00083 QwtPlotSeriesItem<T>::~QwtPlotSeriesItem()
00084 {
00085 delete d_series;
00086 }
00087
00089 template <typename T>
00090 inline QwtSeriesData<T> &QwtPlotSeriesItem<T>::data()
00091 {
00092 return *d_series;
00093 }
00094
00096 template <typename T>
00097 inline const QwtSeriesData<T> &QwtPlotSeriesItem<T>::data() const
00098 {
00099 return *d_series;
00100 }
00101
00106 template <typename T>
00107 inline T QwtPlotSeriesItem<T>::sample(int i) const
00108 {
00109 return d_series->sample(i);
00110 }
00111
00118 template <typename T>
00119 void QwtPlotSeriesItem<T>::setData(const QwtSeriesData<T> &data)
00120 {
00121 delete d_series;
00122 d_series = data.copy();
00123 itemChanged();
00124 }
00125
00130 template <typename T>
00131 int QwtPlotSeriesItem<T>::dataSize() const
00132 {
00133 if ( d_series == NULL )
00134 return 0;
00135
00136 return d_series->size();
00137 }
00138
00144 template <typename T>
00145 QRectF QwtPlotSeriesItem<T>::boundingRect() const
00146 {
00147 if ( d_series == NULL )
00148 return QRectF(1.0, 1.0, -2.0, -2.0);
00149
00150 return d_series->boundingRect();
00151 }
00152
00153 template <typename T>
00154 void QwtPlotSeriesItem<T>::updateScaleDiv(const QwtScaleDiv &xScaleDiv,
00155 const QwtScaleDiv &yScaleDiv)
00156 {
00157 const QRectF rect = QRectF(
00158 xScaleDiv.lowerBound(), yScaleDiv.lowerBound(),
00159 xScaleDiv.range(), yScaleDiv.range());
00160
00161 d_series->setRectOfInterest(rect);
00162 }
00163
00164 #endif