Qwt User's Guide svn
qwt_series_data.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_SERIES_DATA_H
00011 #define QWT_SERIES_DATA_H 1
00012 
00013 #include "qwt_global.h"
00014 #include "qwt_interval.h"
00015 #include "qwt_point_3d.h"
00016 #include "qwt_point_polar.h"
00017 #include <qvector.h>
00018 #include <qrect.h>
00019 
00021 class QWT_EXPORT QwtIntervalSample
00022 {
00023 public:
00024     QwtIntervalSample();
00025     QwtIntervalSample( double, const QwtInterval & );
00026     QwtIntervalSample( double value, double min, double max );
00027 
00028     bool operator==( const QwtIntervalSample & ) const;
00029     bool operator!=( const QwtIntervalSample & ) const;
00030 
00032     double value;
00033 
00035     QwtInterval interval;
00036 };
00037 
00042 inline QwtIntervalSample::QwtIntervalSample():
00043     value( 0.0 )
00044 {
00045 }
00046 
00048 inline QwtIntervalSample::QwtIntervalSample(
00049         double v, const QwtInterval &intv ):
00050     value( v ),
00051     interval( intv )
00052 {
00053 }
00054 
00056 inline QwtIntervalSample::QwtIntervalSample(
00057         double v, double min, double max ):
00058     value( v ),
00059     interval( min, max )
00060 {
00061 }
00062 
00064 inline bool QwtIntervalSample::operator==(
00065     const QwtIntervalSample &other ) const
00066 {
00067     return value == other.value && interval == other.interval;
00068 }
00069 
00071 inline bool QwtIntervalSample::operator!=(
00072     const QwtIntervalSample &other ) const
00073 {
00074     return !( *this == other );
00075 }
00076 
00078 class QWT_EXPORT QwtSetSample
00079 {
00080 public:
00081     QwtSetSample();
00082     bool operator==( const QwtSetSample &other ) const;
00083     bool operator!=( const QwtSetSample &other ) const;
00084 
00086     double value;
00087 
00089     QVector<double> set;
00090 };
00091 
00096 inline QwtSetSample::QwtSetSample():
00097     value( 0.0 )
00098 {
00099 }
00100 
00102 inline bool QwtSetSample::operator==( const QwtSetSample &other ) const
00103 {
00104     return value == other.value && set == other.set;
00105 }
00106 
00108 inline bool QwtSetSample::operator!=( const QwtSetSample &other ) const
00109 {
00110     return !( *this == other );
00111 }
00112 
00121 template <typename T>
00122 class QwtSeriesData
00123 {
00124 public:
00125     QwtSeriesData();
00126     virtual ~QwtSeriesData();
00127 
00129     virtual size_t size() const = 0;
00130 
00136     virtual T sample( size_t i ) const = 0;
00137 
00148     virtual QRectF boundingRect() const = 0;
00149 
00150     virtual void setRectOfInterest( const QRectF & );
00151 
00152 protected:
00154     mutable QRectF d_boundingRect;
00155 
00156 private:
00157     QwtSeriesData<T> &operator=( const QwtSeriesData<T> & );
00158 };
00159 
00161 template <typename T>
00162 QwtSeriesData<T>::QwtSeriesData():
00163     d_boundingRect( 0.0, 0.0, -1.0, -1.0 )
00164 {
00165 }
00166 
00168 template <typename T>
00169 QwtSeriesData<T>::~QwtSeriesData()
00170 {
00171 }
00172 
00182 template <typename T>
00183 void QwtSeriesData<T>::setRectOfInterest( const QRectF & )
00184 {
00185 }
00186 
00193 template <typename T>
00194 class QwtArraySeriesData: public QwtSeriesData<T>
00195 {
00196 public:
00197     QwtArraySeriesData();
00198     QwtArraySeriesData( const QVector<T> & );
00199 
00200     void setSamples( const QVector<T> & );
00201     const QVector<T> samples() const;
00202 
00203     virtual size_t size() const;
00204     virtual T sample( size_t ) const;
00205 
00206 protected:
00208     QVector<T> d_samples;
00209 };
00210 
00212 template <typename T>
00213 QwtArraySeriesData<T>::QwtArraySeriesData()
00214 {
00215 }
00216 
00221 template <typename T>
00222 QwtArraySeriesData<T>::QwtArraySeriesData( const QVector<T> &samples ):
00223     d_samples( samples )
00224 {
00225 }
00226 
00231 template <typename T>
00232 void QwtArraySeriesData<T>::setSamples( const QVector<T> &samples )
00233 {
00234     QwtSeriesData<T>::d_boundingRect = QRectF( 0.0, 0.0, -1.0, -1.0 );
00235     d_samples = samples;
00236 }
00237 
00239 template <typename T>
00240 const QVector<T> QwtArraySeriesData<T>::samples() const
00241 {
00242     return d_samples;
00243 }
00244 
00246 template <typename T>
00247 size_t QwtArraySeriesData<T>::size() const
00248 {
00249     return d_samples.size();
00250 }
00251 
00257 template <typename T>
00258 T QwtArraySeriesData<T>::sample( size_t i ) const
00259 {
00260     return d_samples[i];
00261 }
00262 
00264 class QWT_EXPORT QwtPointSeriesData: public QwtArraySeriesData<QPointF>
00265 {
00266 public:
00267     QwtPointSeriesData(
00268         const QVector<QPointF> & = QVector<QPointF>() );
00269 
00270     virtual QRectF boundingRect() const;
00271 };
00272 
00274 class QWT_EXPORT QwtPoint3DSeriesData: public QwtArraySeriesData<QwtPoint3D>
00275 {
00276 public:
00277     QwtPoint3DSeriesData(
00278         const QVector<QwtPoint3D> & = QVector<QwtPoint3D>() );
00279     virtual QRectF boundingRect() const;
00280 };
00281 
00283 class QWT_EXPORT QwtIntervalSeriesData: public QwtArraySeriesData<QwtIntervalSample>
00284 {
00285 public:
00286     QwtIntervalSeriesData(
00287         const QVector<QwtIntervalSample> & = QVector<QwtIntervalSample>() );
00288 
00289     virtual QRectF boundingRect() const;
00290 };
00291 
00293 class QWT_EXPORT QwtSetSeriesData: public QwtArraySeriesData<QwtSetSample>
00294 {
00295 public:
00296     QwtSetSeriesData(
00297         const QVector<QwtSetSample> & = QVector<QwtSetSample>() );
00298 
00299     virtual QRectF boundingRect() const;
00300 };
00301 
00305 class QWT_EXPORT QwtPointArrayData: public QwtSeriesData<QPointF>
00306 {
00307 public:
00308     QwtPointArrayData( const QVector<double> &x, const QVector<double> &y );
00309     QwtPointArrayData( const double *x, const double *y, size_t size );
00310 
00311     virtual QRectF boundingRect() const;
00312 
00313     virtual size_t size() const;
00314     virtual QPointF sample( size_t i ) const;
00315 
00316     const QVector<double> &xData() const;
00317     const QVector<double> &yData() const;
00318 
00319 private:
00320     QVector<double> d_x;
00321     QVector<double> d_y;
00322 };
00323 
00327 class QWT_EXPORT QwtCPointerData: public QwtSeriesData<QPointF>
00328 {
00329 public:
00330     QwtCPointerData( const double *x, const double *y, size_t size );
00331 
00332     virtual QRectF boundingRect() const;
00333     virtual size_t size() const;
00334     virtual QPointF sample( size_t i ) const;
00335 
00336     const double *xData() const;
00337     const double *yData() const;
00338 
00339 private:
00340     const double *d_x;
00341     const double *d_y;
00342     size_t d_size;
00343 };
00344 
00397 class QWT_EXPORT QwtSyntheticPointData: public QwtSeriesData<QPointF>
00398 {
00399 public:
00400     QwtSyntheticPointData( size_t size,
00401         const QwtInterval & = QwtInterval() );
00402 
00403     void setSize( size_t size );
00404     size_t size() const;
00405 
00406     void setInterval( const QwtInterval& );
00407     QwtInterval interval() const;
00408 
00409     virtual QRectF boundingRect() const;
00410     virtual QPointF sample( size_t i ) const;
00411 
00418     virtual double y( double x ) const = 0;
00419     virtual double x( uint index ) const;
00420 
00421     virtual void setRectOfInterest( const QRectF & );
00422     QRectF rectOfInterest() const;
00423 
00424 private:
00425     size_t d_size;
00426     QwtInterval d_interval;
00427     QRectF d_rectOfInterest;
00428     QwtInterval d_intervalOfInterest;
00429 };
00430 
00431 QWT_EXPORT QRectF qwtBoundingRect(
00432     const QwtSeriesData<QPointF> &, int from = 0, int to = -1 );
00433 QWT_EXPORT QRectF qwtBoundingRect(
00434     const QwtSeriesData<QwtPoint3D> &, int from = 0, int to = -1 );
00435 QWT_EXPORT QRectF qwtBoundingRect(
00436     const QwtSeriesData<QwtPointPolar> &, int from = 0, int to = -1 );
00437 QWT_EXPORT QRectF qwtBoundingRect(
00438     const QwtSeriesData<QwtIntervalSample> &, int from = 0, int to = -1 );
00439 QWT_EXPORT QRectF qwtBoundingRect(
00440     const QwtSeriesData<QwtSetSample> &, int from = 0, int to = -1 );
00441 
00442 #endif
qmi style