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_STORE_H 00011 #define QWT_SERIES_STORE_H 00012 00013 #include "qwt_global.h" 00014 #include "qwt_series_data.h" 00015 00024 class QwtAbstractSeriesStore 00025 { 00026 protected: 00028 virtual ~QwtAbstractSeriesStore() {} 00029 00031 virtual void dataChanged() = 0; 00032 00037 virtual void setRectOfInterest( const QRectF & ) = 0; 00038 00040 virtual QRectF dataRect() const = 0; 00041 00043 virtual size_t dataSize() const = 0; 00044 }; 00045 00056 template <typename T> 00057 class QwtSeriesStore: public virtual QwtAbstractSeriesStore 00058 { 00059 public: 00064 explicit QwtSeriesStore<T>(); 00065 00067 ~QwtSeriesStore<T>(); 00068 00076 void setData( QwtSeriesData<T> *series ); 00077 00079 QwtSeriesData<T> *data(); 00080 00082 const QwtSeriesData<T> *data() const; 00083 00088 T sample( int index ) const; 00089 00094 virtual size_t dataSize() const; 00095 00102 virtual QRectF dataRect() const; 00103 00110 virtual void setRectOfInterest( const QRectF &rect ); 00111 00118 QwtSeriesData<T> *swapData( QwtSeriesData<T> *series ); 00119 00120 private: 00121 QwtSeriesData<T> *d_series; 00122 }; 00123 00124 template <typename T> 00125 QwtSeriesStore<T>::QwtSeriesStore(): 00126 d_series( NULL ) 00127 { 00128 } 00129 00130 template <typename T> 00131 QwtSeriesStore<T>::~QwtSeriesStore() 00132 { 00133 delete d_series; 00134 } 00135 00136 template <typename T> 00137 inline QwtSeriesData<T> *QwtSeriesStore<T>::data() 00138 { 00139 return d_series; 00140 } 00141 00142 template <typename T> 00143 inline const QwtSeriesData<T> *QwtSeriesStore<T>::data() const 00144 { 00145 return d_series; 00146 } 00147 00148 template <typename T> 00149 inline T QwtSeriesStore<T>::sample( int index ) const 00150 { 00151 return d_series ? d_series->sample( index ) : T(); 00152 } 00153 00154 template <typename T> 00155 void QwtSeriesStore<T>::setData( QwtSeriesData<T> *series ) 00156 { 00157 if ( d_series != series ) 00158 { 00159 delete d_series; 00160 d_series = series; 00161 dataChanged(); 00162 } 00163 } 00164 00165 template <typename T> 00166 size_t QwtSeriesStore<T>::dataSize() const 00167 { 00168 if ( d_series == NULL ) 00169 return 0; 00170 00171 return d_series->size(); 00172 } 00173 00174 template <typename T> 00175 QRectF QwtSeriesStore<T>::dataRect() const 00176 { 00177 if ( d_series == NULL ) 00178 return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid 00179 00180 return d_series->boundingRect(); 00181 } 00182 00183 template <typename T> 00184 void QwtSeriesStore<T>::setRectOfInterest( const QRectF &rect ) 00185 { 00186 if ( d_series ) 00187 d_series->setRectOfInterest( rect ); 00188 } 00189 00190 template <typename T> 00191 QwtSeriesData<T>* QwtSeriesStore<T>::swapData( QwtSeriesData<T> *series ) 00192 { 00193 QwtSeriesData<T> * swappedSeries = d_series; 00194 d_series = series; 00195 00196 return swappedSeries; 00197 } 00198 00199 #endif