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>
38class Coord
39{
40public:
41double x,y;
42 Coord(double x = 0.0, double y = 0.0):x(x),y(y) {}
43 ~Coord() {}
44};
45
49
50class VDKChart;
52
56class 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 {}
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
150class 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
163enum
164{
165 chart_class = 4096,
166 linechart_class,
167 scatteredchart_class,
168 barchart_class
169};
170
172
192class 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
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
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
Series(char *title)
Definition: chart.h:98
VDKReadWriteValueProp< Series, int > LineWidth
Definition: chart.h:76
Coord Min()
Definition: chart.h:127
char * Title()
Definition: chart.h:135
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