00001
00002
00003
00004
00005
00006
00007
00009
00010 #ifndef DATASET_H_
00011 #define DATASET_H_
00012
00013 #include <wx/wxfreechartdefs.h>
00014
00015 #include <time.h>
00016
00017 #include <wx/refobject.h>
00018
00019 #include <wx/observable.h>
00020 #include <wx/chartrenderer.h>
00021 #include <wx/marker.h>
00022
00023 #include <wx/dynarray.h>
00024
00025 class Dataset;
00026 class DateTimeDataset;
00027
00028 #define FOREACH_SERIE(index, dataset) \
00029 for (size_t index = 0; index < dataset->GetSerieCount(); index++)
00030
00031 #define FOREACH_DATAITEM(index, serie, dataset) \
00032 for (size_t index = 0; index < dataset->GetCount(serie); index++)
00033
00037 class WXDLLIMPEXP_FREECHART DatasetObserver
00038 {
00039 public:
00040 DatasetObserver();
00041 virtual ~DatasetObserver();
00042
00043 virtual void DatasetChanged(Dataset *dataset) = 0;
00044 };
00045
00050 class WXDLLIMPEXP_FREECHART Dataset : public wxObject,
00051 public RefObject, public Observable<DatasetObserver>, public DrawObserver
00052 {
00053 DECLARE_CLASS(Dataset)
00054 public:
00055 Dataset();
00056 virtual ~Dataset();
00057
00062 void SetRenderer(Renderer *renderer);
00063
00064 Renderer *GetBaseRenderer();
00065
00071 void BeginUpdate();
00072
00078 void EndUpdate();
00079
00084 virtual size_t GetSerieCount() = 0;
00085
00091 virtual size_t GetCount(size_t serie) = 0;
00092
00098 virtual wxString GetSerieName(size_t serie) = 0;
00099
00105 virtual double GetMinValue(bool vertical) = 0;
00106
00112 virtual double GetMaxValue(bool vertical) = 0;
00113
00114 virtual DateTimeDataset *AsDateTimeDataset();
00115
00120 void AddMarker(Marker *marker);
00121
00126 size_t GetMarkersCount();
00127
00133 Marker *GetMarker(size_t index);
00134
00135
00136
00137
00138
00139 virtual void NeedRedraw(DrawObject *obj);
00140
00141 protected:
00146 virtual bool AcceptRenderer(Renderer *r) = 0;
00147
00152 void DatasetChanged();
00153
00154 Renderer *m_renderer;
00155 private:
00156 bool m_updating;
00157 bool m_changed;
00158
00159 MarkerArray m_markers;
00160
00161 FIRE_WITH_THIS(DatasetChanged);
00162 };
00163
00167 class WXDLLIMPEXP_FREECHART DateTimeDataset
00168 {
00169 public:
00170 DateTimeDataset();
00171 virtual ~DateTimeDataset();
00172
00178 virtual time_t GetDate(size_t index) = 0;
00179
00184 virtual size_t GetCount() = 0;
00185 };
00186
00187 WX_DECLARE_USER_EXPORTED_OBJARRAY(Dataset *, DatasetArrayBase, WXDLLIMPEXP_FREECHART);
00188
00189 class WXDLLIMPEXP_FREECHART DatasetArray : public DatasetArrayBase
00190 {
00191 public:
00192 DatasetArray();
00193 virtual ~DatasetArray();
00194
00195 void Add(Dataset *dataset);
00196
00197 void Remove(Dataset *dataset);
00198
00199 void RemoveAt(size_t index, size_t count = 1);
00200 };
00201
00202 #endif