Qwt User's Guide svn
qwt_plot_seriesitem.h
00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
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 
00021 class QWT_EXPORT QwtPlotAbstractSeriesItem: public QwtPlotItem
00022 {
00023 public:
00024     explicit QwtPlotAbstractSeriesItem( const QString &title = QString::null );
00025     explicit QwtPlotAbstractSeriesItem( const QwtText &title );
00026 
00027     virtual ~QwtPlotAbstractSeriesItem();
00028 
00029     void setOrientation( Qt::Orientation );
00030     Qt::Orientation orientation() const;
00031 
00032     virtual void draw( QPainter *p,
00033         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00034         const QRectF & ) const;
00035 
00047     virtual void drawSeries( QPainter *painter,
00048         const QwtScaleMap &xMap, const QwtScaleMap &yMap,
00049         const QRectF &canvasRect, int from, int to ) const = 0;
00050 
00051 private:
00052     class PrivateData;
00053     PrivateData *d_data;
00054 };
00055 
00059 template <typename T>
00060 class QwtPlotSeriesItem: public QwtPlotAbstractSeriesItem
00061 {
00062 public:
00063     explicit QwtPlotSeriesItem<T>( const QString &title = QString::null );
00064     explicit QwtPlotSeriesItem<T>( const QwtText &title );
00065 
00066     virtual ~QwtPlotSeriesItem<T>();
00067 
00068     void setData( QwtSeriesData<T> * );
00069 
00070     QwtSeriesData<T> *data();
00071     const QwtSeriesData<T> *data() const;
00072 
00073     size_t dataSize() const;
00074     T sample( int index ) const;
00075 
00076     virtual QRectF boundingRect() const;
00077     virtual void updateScaleDiv( const QwtScaleDiv &,
00078                                  const QwtScaleDiv & );
00079 
00080 protected:
00082     QwtSeriesData<T> *d_series;
00083 };
00084 
00089 template <typename T>
00090 QwtPlotSeriesItem<T>::QwtPlotSeriesItem( const QString &title ):
00091     QwtPlotAbstractSeriesItem( QwtText( title ) ),
00092     d_series( NULL )
00093 {
00094 }
00095 
00100 template <typename T>
00101 QwtPlotSeriesItem<T>::QwtPlotSeriesItem( const QwtText &title ):
00102     QwtPlotAbstractSeriesItem( title ),
00103     d_series( NULL )
00104 {
00105 }
00106 
00108 template <typename T>
00109 QwtPlotSeriesItem<T>::~QwtPlotSeriesItem()
00110 {
00111     delete d_series;
00112 }
00113 
00115 template <typename T>
00116 inline QwtSeriesData<T> *QwtPlotSeriesItem<T>::data()
00117 {
00118     return d_series;
00119 }
00120 
00122 template <typename T>
00123 inline const QwtSeriesData<T> *QwtPlotSeriesItem<T>::data() const
00124 {
00125     return d_series;
00126 }
00127 
00132 template <typename T>
00133 inline T QwtPlotSeriesItem<T>::sample( int index ) const
00134 {
00135     return d_series ? d_series->sample( index ) : T();
00136 }
00137 
00145 template <typename T>
00146 void QwtPlotSeriesItem<T>::setData( QwtSeriesData<T> *data )
00147 {
00148     if ( d_series != data )
00149     {
00150         delete d_series;
00151         d_series = data;
00152         itemChanged();
00153     }
00154 }
00155 
00160 template <typename T>
00161 size_t QwtPlotSeriesItem<T>::dataSize() const
00162 {
00163     if ( d_series == NULL )
00164         return 0;
00165 
00166     return d_series->size();
00167 }
00168 
00175 template <typename T>
00176 QRectF QwtPlotSeriesItem<T>::boundingRect() const
00177 {
00178     if ( d_series == NULL )
00179         return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid
00180 
00181     return d_series->boundingRect();
00182 }
00183 
00192 template <typename T>
00193 void QwtPlotSeriesItem<T>::updateScaleDiv( 
00194     const QwtScaleDiv &xScaleDiv, const QwtScaleDiv &yScaleDiv )
00195 {
00196     if ( d_series )
00197     {
00198         const QRectF rect = QRectF(
00199             xScaleDiv.lowerBound(), yScaleDiv.lowerBound(),
00200             xScaleDiv.range(), yScaleDiv.range() );
00201 
00202         d_series->setRectOfInterest( rect );
00203     }
00204 }
00205 
00206 #endif
qmi style