vdk 2.4.0
chart.h
1 /*
2  * ===========================
3  * VDK Component Library
4  * Version 0.2
5  * ===========================
6  * Copyright (C) 1998, Mario Motta
7  * Developed by Mario Motta <mmotta@guest.net>
8  * ===========================================
9  * This library is a component of:
10  * VDK Visual Development Kit
11  * Version 0.4.1
12  * Copyright (C) 1998, Mario Motta
13  * Developed by Mario Motta <mmotta@guest.net>
14  * ===========================================
15  * This library is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU Library General Public
17  * License as published by the Free Software Foundation; either
18  * version 2 of the License, or (at your option) any later version.
19  *
20  * This library is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23  * Library General Public License for more details.
24  *
25  * You should have received a copy of the GNU Library General Public
26  * License along with this library; if not, write to the Free Software
27  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
28  * 02111-130
29  */
30 
31 #ifndef CHART_H
32 #define CHART_H
33 #include <vdk/vdk.h>
38 class Coord
39 {
40 public:
41 double x,y;
42  Coord(double x = 0.0, double y = 0.0):x(x),y(y) {}
43  ~Coord() {}
44 };
45 
48 typedef VDKArray<double> Darray;
49 
50 class VDKChart;
52 
56 class Series: public CoordList
57 {
58  Coord max,min;
59  VDKString title;
60  public:
64  VDKReadWriteValueProp<Series,VDKRgb> Color;
72  VDKReadWriteValueProp<Series,GdkLineStyle> LineStyle;
76  VDKReadWriteValueProp<Series,int> LineWidth;
85  VDKReadWriteValueProp<Series,GdkCapStyle> LineCapStyle;
93  VDKReadWriteValueProp<Series,GdkJoinStyle> LineJoinStyle;
98  Series(char* title):
99  CoordList(),
100  title(title),
101  Color("Color",this,VDKRgb(0,0,0)),
102  LineStyle("LineStyle",this,GDK_LINE_SOLID),
103  LineWidth("LineWidth",this,1),
104  LineCapStyle("LineCapStyle",this,GDK_CAP_NOT_LAST),
105  LineJoinStyle("LineJoinStyle",this,GDK_JOIN_MITER)
106  {}
110  ~Series() {}
116  void Add(double x, double y);
123  void Add(double* x, double* y, int n);
127  Coord Min() { return min; }
131  Coord Max() { return max; }
135  char* Title() { return (char*) title; }
139  bool operator==(Series& s) { return title == s.title; }
140 };
141 
144 
146 
150 class ChartAxis
151 {
152  VDKRect domain;
153  VDKChart* owner;
154  public:
155  ChartAxis():owner((VDKChart*) NULL) {}
156  ChartAxis(VDKChart* owner,int w, int h);
157  ChartAxis(ChartAxis& a);
158  ~ChartAxis() {}
159  void Draw();
160  VDKRect& Domain() { return domain; }
161 };
162 
163 enum
164 {
165  chart_class = 4096,
166  linechart_class,
167  scatteredchart_class,
168  barchart_class
169 };
170 
172 
192 class VDKChart: public VDKCanvas
193 {
194 
195  protected:
196  GtkWidget *tip_window;
197  VDKPoint size;
198  double xn1,yn1,xn2,yn2,xv1,yv1,xv2,yv2,kx,ky;
199  Coord domainmax,domainmin;
200  SeriesList series;
201  bool OnConfigure(VDKObject* sender, GdkEvent* event);
202  bool OnClick(VDKObject* sender, GdkEvent* event);
203  bool OnClickRelease(VDKObject* sender, GdkEvent* event);
204  ChartAxis axis;
205  void ComputeDomainLimits(Series* s);
206  virtual void DrawChart();
207  void DrawTitle();
208  void DrawTicks();
209  void DrawLabels();
210  public:
215  VDKReadWriteValueProp<VDKChart, int> ChartBorder;
219  VDKReadWriteValueProp<VDKChart, VDKString> Title;
223  VDKReadWriteValueProp<VDKChart, VDKString> LabelX;
227  VDKReadWriteValueProp<VDKChart, VDKString> LabelY;
231  VDKReadWriteValueProp<VDKChart, int> LabelXDigits;
235  VDKReadWriteValueProp<VDKChart, int> LabelYDigits;
242  VDKChart(VDKForm* owner, int w = 100, int h = 100);
246  virtual ~VDKChart();
250  virtual int isA() { return chart_class; }
259  void AddSeries(Series* s);
263  void Clear();
264  void SetChartBorder(int b);
265  int GetChartBorder() { return ChartBorder; }
269  GdkGC* GC() { return gc; }
274  void SetColor(VDKRgb rgb);
278  void SetLineAttributes(gint lineWidth,
279  GdkLineStyle lineStyle,
280  GdkCapStyle capStyle,
281  GdkJoinStyle joinStyle);
291  virtual void Plot(VDKPoint& p , int i, Series* s) {}
292  DECLARE_EVENT_LIST(VDKChart);
293 };
295 
299 class VDKLineChart: public VDKChart
300 {
301  public:
302  VDKLineChart(VDKForm* owner, int w = 100, int h = 100):
303  VDKChart(owner,w,h) {}
304  virtual ~VDKLineChart() {}
308  virtual void Plot(VDKPoint& p, int t, Series*);
312  virtual int isA() { return linechart_class; }
313 };
315 
320 {
321  public:
322  VDKScatteredChart(VDKForm* owner, int w = 100, int h = 100):
323  VDKChart(owner,w,h) {}
324  virtual ~VDKScatteredChart() {}
325  virtual void Plot(VDKPoint& p, int t, Series*);
326  virtual int isA() { return scatteredchart_class; }
327 };
328 
330 
335 class VDKBarChart: public VDKChart
336 {
337  public:
341  VDKReadWriteValueProp<VDKBarChart,int> BarWidth;
342  /*
343  Sets/gets label flag
344  */
345  VDKReadWriteValueProp<VDKBarChart,bool> Labels;
346 
347  VDKBarChart(VDKForm* owner, int w = 100, int h = 100):
348  VDKChart(owner,w,h),
349  BarWidth("BarWidth",this,20),
350  Labels("Labels",this,true)
351  {}
352  virtual ~VDKBarChart() {}
356  virtual void Plot(VDKPoint& p, int t, Series*);
360  virtual int isA() { return barchart_class; }
361 };
362 
363 #endif
364 
365 
provides a 2D object
Definition: chart.h:39
Is a list of 2D points with some propreties and behaviours added.
Definition: chart.h:57
VDKReadWriteValueProp< Series, GdkJoinStyle > LineJoinStyle
Definition: chart.h:93
VDKReadWriteValueProp< Series, VDKRgb > Color
Definition: chart.h:64
bool operator==(Series &s)
Definition: chart.h:139
char * Title()
Definition: chart.h:135
Series(char *title)
Definition: chart.h:98
VDKReadWriteValueProp< Series, int > LineWidth
Definition: chart.h:76
Coord Min()
Definition: chart.h:127
void Add(double x, double y)
Definition: chart.cc:460
~Series()
Definition: chart.h:110
VDKReadWriteValueProp< Series, GdkLineStyle > LineStyle
Definition: chart.h:72
VDKReadWriteValueProp< Series, GdkCapStyle > LineCapStyle
Definition: chart.h:85
Coord Max()
Definition: chart.h:131
provides a templatized array
Definition: vdkarray.h:73
Provides a bar chart.
Definition: chart.h:336
VDKReadWriteValueProp< VDKBarChart, int > BarWidth
Definition: chart.h:341
virtual void Plot(VDKPoint &p, int t, Series *)
Definition: chart.cc:539
virtual int isA()
Definition: chart.h:360
This class provides a canvas widget.
Definition: canvas.h:53
Provides a char base class.
Definition: chart.h:193
VDKReadWriteValueProp< VDKChart, int > LabelYDigits
Definition: chart.h:235
virtual void Plot(VDKPoint &p, int i, Series *s)
Definition: chart.h:291
GdkGC * GC()
Definition: chart.h:269
VDKReadWriteValueProp< VDKChart, VDKString > Title
Definition: chart.h:219
void SetColor(VDKRgb rgb)
Definition: chart.cc:379
void AddSeries(Series *s)
Definition: chart.cc:154
virtual int isA()
Definition: chart.h:250
VDKReadWriteValueProp< VDKChart, int > ChartBorder
Definition: chart.h:215
VDKReadWriteValueProp< VDKChart, VDKString > LabelY
Definition: chart.h:227
VDKReadWriteValueProp< VDKChart, int > LabelXDigits
Definition: chart.h:231
virtual ~VDKChart()
Definition: chart.cc:143
void Clear()
Definition: chart.cc:201
VDKReadWriteValueProp< VDKChart, VDKString > LabelX
Definition: chart.h:223
void SetLineAttributes(gint lineWidth, GdkLineStyle lineStyle, GdkCapStyle capStyle, GdkJoinStyle joinStyle)
Definition: chart.cc:396
VDKChart(VDKForm *owner, int w=100, int h=100)
Definition: chart.cc:96
VDKForm widgets, generally the outermost widget container.
Definition: forms.h:69
Definition: chart.h:300
virtual void Plot(VDKPoint &p, int t, Series *)
Definition: chart.cc:491
virtual int isA()
Definition: chart.h:312
Provides a VDKList iterator.
Definition: dlist.h:201
Definition: vdkobj.h:141
Provides a simple point object.
Definition: vdkutils.h:94
Provides a simple rectangle object.
Definition: vdkutils.h:171
Provides a simple RGB color structure.
Definition: vdkutils.h:38
Definition: chart.h:320
virtual void Plot(VDKPoint &p, int t, Series *)
Definition: chart.cc:521
virtual int isA()
Definition: chart.h:326
Implements famous cont referenced string objects.
Definition: vdkstring.h:46
provides a VDKValueList iterator
Definition: value_sem_list.h:180
provides a templatized double-linked list
Definition: value_sem_list.h:82