Qwt User's Guide 6.1.0

- Main Page
- Related Pages
- Classes

All Classes Functions Variables Typedefs Enumerations Enumerator Pages
qwt_series_store.h
1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2 * Qwt Widget Library
3 * Copyright (C) 1997 Josef Wilgen
4 * Copyright (C) 2002 Uwe Rathmann
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the Qwt License, Version 1.0
8 *****************************************************************************/
9
10 #ifndef QWT_SERIES_STORE_H
11 #define QWT_SERIES_STORE_H
12
13 #include "qwt_global.h"
14 #include "qwt_series_data.h"
15
24 class QwtAbstractSeriesStore
25 {
26 protected:
28 virtual ~QwtAbstractSeriesStore() {}
29
31 virtual void dataChanged() = 0;
32
37 virtual void setRectOfInterest( const QRectF & ) = 0;
38
40 virtual QRectF dataRect() const = 0;
41
43 virtual size_t dataSize() const = 0;
44 };
45
56 template <typename T>
57 class QwtSeriesStore: public virtual QwtAbstractSeriesStore
58 {
59 public:
64 explicit QwtSeriesStore<T>();
65
67 ~QwtSeriesStore<T>();
68
76 void setData( QwtSeriesData<T> *series );
77
79 QwtSeriesData<T> *data();
80
82 const QwtSeriesData<T> *data() const;
83
88 T sample( int index ) const;
89
94 virtual size_t dataSize() const;
95
102 virtual QRectF dataRect() const;
103
110 virtual void setRectOfInterest( const QRectF &rect );
111
118 QwtSeriesData<T> *swapData( QwtSeriesData<T> *series );
119
120 private:
121 QwtSeriesData<T> *d_series;
122 };
123
124 template <typename T>
125 QwtSeriesStore<T>::QwtSeriesStore():
126 d_series( NULL )
127 {
128 }
129
130 template <typename T>
131 QwtSeriesStore<T>::~QwtSeriesStore()
132 {
133 delete d_series;
134 }
135
136 template <typename T>
137 inline QwtSeriesData<T> *QwtSeriesStore<T>::data()
138 {
139 return d_series;
140 }
141
142 template <typename T>
143 inline const QwtSeriesData<T> *QwtSeriesStore<T>::data() const
144 {
145 return d_series;
146 }
147
148 template <typename T>
149 inline T QwtSeriesStore<T>::sample( int index ) const
150 {
151 return d_series ? d_series->sample( index ) : T();
152 }
153
154 template <typename T>
155 void QwtSeriesStore<T>::setData( QwtSeriesData<T> *series )
156 {
157 if ( d_series != series )
158 {
159 delete d_series;
160 d_series = series;
161 dataChanged();
162 }
163 }
164
165 template <typename T>
166 size_t QwtSeriesStore<T>::dataSize() const
167 {
168 if ( d_series == NULL )
169 return 0;
170
171 return d_series->size();
172 }
173
174 template <typename T>
175 QRectF QwtSeriesStore<T>::dataRect() const
176 {
177 if ( d_series == NULL )
178 return QRectF( 1.0, 1.0, -2.0, -2.0 ); // invalid
179
180 return d_series->boundingRect();
181 }
182
183 template <typename T>
184 void QwtSeriesStore<T>::setRectOfInterest( const QRectF &rect )
185 {
186 if ( d_series )
187 d_series->setRectOfInterest( rect );
188 }
189
190 template <typename T>
191 QwtSeriesData<T>* QwtSeriesStore<T>::swapData( QwtSeriesData<T> *series )
192 {
193 QwtSeriesData<T> * swappedSeries = d_series;
194 d_series = series;
195
196 return swappedSeries;
197 }
198
199 #endif