1
2 /*
3 * ===========================
4 * VDK Visual Development Kit
5 * Version 2.0.2
6 * May 2002
7 * ===========================
8 *
9 * Copyright (C) 1998, Mario Motta
10 * Developed by Mario Motta <mmotta@guest.net>
11 * Based on ISDataBox
12 * Developed by Ionutz Borcoman <borco@borco-ei.eng.hokudai.ac.jp>
13 * based on GtkDatabox - An extension to the gtk+ library
14 * Copyright (C) 1998-1999 Roland Bock
15 *
16 * This library is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU Library General Public
18 * License as published by the Free Software Foundation; either
19 * version 2 of the License, or (at your option) any later version.
20 *
21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Library General Public License for more details.
25 *
26 * You should have received a copy of the GNU Library General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
29 * 02111-1307, USA.
30 */
31
32 #include <vdk/vdkdatabox.h>
33 #include <stdlib.h>
34 const GtkDataboxCoord zeroCoord = {0,0};
35 const GtkDataboxValue zeroValue = {0.0, 0.0};
36
VDKDataBox(VDKForm * owner)37 VDKDataBox::VDKDataBox(VDKForm *owner)
38 :VDKObject(owner),
39 Rulers("Rulers", this, true, &VDKDataBox::SetRulers),
40 Scrollbars("Scrollbars", this, true, &VDKDataBox::SetScrollbars),
41 Zoom("Zoom", this, true, &VDKDataBox::SetZoom),
42 TopLeft("TopLeft", this, zeroValue),
43 BottomRight("BottomRight", this, zeroValue),
44 Mark("Mark", this, zeroCoord),
45 Select("Select", this, zeroCoord)
46 {
47 widget = sigwid = gtk_databox_new();
48
49 gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_zoomed",
50 GTK_SIGNAL_FUNC(&VDKDataBox::_zoomed),
51 this);
52 gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_marked",
53 GTK_SIGNAL_FUNC(&VDKDataBox::_marked),
54 this);
55 gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_started",
56 GTK_SIGNAL_FUNC(&VDKDataBox::_selectionStarted),
57 this);
58 gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_changed",
59 GTK_SIGNAL_FUNC(&VDKDataBox::_selectionChanged),
60 this);
61 gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_stopped",
62 GTK_SIGNAL_FUNC(&VDKDataBox::_selectionStoped),
63 this);
64 gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_canceled",
65 GTK_SIGNAL_FUNC(&VDKDataBox::_selectionCanceled),
66 this);
67 ConnectDefaultSignals();
68 }
69
~VDKDataBox()70 VDKDataBox::~VDKDataBox()
71 {
72 }
73
74 void
SetRulers(bool val)75 VDKDataBox::SetRulers(bool val)
76 {
77 if(val)
78 gtk_databox_show_rulers(GTK_DATABOX(widget));
79 else
80 gtk_databox_hide_rulers(GTK_DATABOX(widget));
81 }
82
83
84 void
SetScrollbars(bool val)85 VDKDataBox::SetScrollbars(bool val)
86 {
87 if(val)
88 gtk_databox_show_scrollbars(GTK_DATABOX(widget));
89 else
90 gtk_databox_hide_scrollbars(GTK_DATABOX(widget));
91 }
92
93 void
SetZoom(bool val)94 VDKDataBox::SetZoom(bool val)
95 {
96 if(val)
97 gtk_databox_enable_zoom(GTK_DATABOX(widget));
98 else
99 gtk_databox_disable_zoom(GTK_DATABOX(widget));
100 }
101
102 GtkDataboxValue
GetValue(GtkDataboxCoord coord)103 VDKDataBox::GetValue(GtkDataboxCoord coord)
104 {
105 GtkDataboxValue ret;
106 gtk_databox_data_get_value(GTK_DATABOX(widget), coord, &ret);
107 return ret;
108 }
109
110 void
GetExtrema(GtkDataboxValue & min,GtkDataboxValue & max,bool visible)111 VDKDataBox::GetExtrema(GtkDataboxValue& min, GtkDataboxValue& max, bool visible)
112 {
113 if(visible)
114 gtk_databox_data_get_visible_extrema(GTK_DATABOX(widget), &min, &max);
115 else
116 gtk_databox_data_get_extrema(GTK_DATABOX(widget), &min, &max);
117 }
118
119 void
Rescale()120 VDKDataBox::Rescale()
121 {
122 gtk_databox_rescale(GTK_DATABOX(widget));
123 }
124
125 void
Rescale(GtkDataboxValue min,GtkDataboxValue max)126 VDKDataBox::Rescale(GtkDataboxValue min, GtkDataboxValue max)
127 {
128 gtk_databox_rescale_with_values(GTK_DATABOX(widget), min, max);
129 }
130
131 void
Redraw()132 VDKDataBox::Redraw()
133 {
134 gtk_databox_redraw(GTK_DATABOX(widget));
135 }
136
137 VDKColor*
GetColor(int index)138 VDKDataBox::GetColor(int index)
139 {
140 VDKColor *ret;
141 GdkColor *color;
142
143 color = (GdkColor*) malloc (sizeof(GdkColor));
144 gtk_databox_data_get_color(GTK_DATABOX(widget), index, color);
145 ret = new VDKColor(this,
146 color->red,
147 color->green,
148 color->blue);
149 free(color);
150
151 return ret;
152 }
153
154 void
SetColor(int index,VDKColor * color,bool redraw)155 VDKDataBox::SetColor(int index, VDKColor* color, bool redraw)
156 {
157 GdkColor *tmp = color->Color();
158 gtk_databox_data_set_color(GTK_DATABOX(widget), index, *tmp);
159 if(redraw)
160 Redraw();
161 }
162
163 gint
RemoveData(gint index)164 VDKDataBox::RemoveData(gint index)
165 {
166 return gtk_databox_data_remove(GTK_DATABOX(widget), index);
167 }
168
169 gint
RemoveData()170 VDKDataBox::RemoveData()
171 {
172 return gtk_databox_data_remove_all(GTK_DATABOX(widget));
173 }
174
175 gint
DestroyData(gint index)176 VDKDataBox::DestroyData(gint index)
177 {
178 return gtk_databox_data_destroy(GTK_DATABOX(widget), index);
179 }
180
181 gint
DestroyData()182 VDKDataBox::DestroyData()
183 {
184 return gtk_databox_data_destroy_all(GTK_DATABOX(widget));
185 }
186
187 gint
AddXY(guint length,gfloat * X,gfloat * Y,VDKColor * color,GtkDataboxDataType type,guint dotSize)188 VDKDataBox::AddXY(guint length, gfloat *X, gfloat *Y,
189 VDKColor *color,
190 GtkDataboxDataType type, guint dotSize)
191 {
192 return gtk_databox_data_add_x_y(GTK_DATABOX(widget), length,
193 X, Y,
194 (GdkColor)*(color->Color()),
195 type, dotSize);
196 }
197
198 gint
AddX(guint length,gfloat * X,guint indexSharedY,VDKColor * color,GtkDataboxDataType type,guint dotSize)199 VDKDataBox::AddX (guint length, gfloat *X, guint indexSharedY, VDKColor *color,
200 GtkDataboxDataType type, guint dotSize)
201 {
202 return gtk_databox_data_add_x(GTK_DATABOX(widget), length,
203 X, indexSharedY,
204 (GdkColor)*(color->Color()),
205 type, dotSize);
206 }
207
208 gint
AddY(guint length,gfloat * Y,guint indexSharedX,VDKColor * color,GtkDataboxDataType type,guint dotSize)209 VDKDataBox::AddY (guint length, gfloat *Y, guint indexSharedX, VDKColor *color,
210 GtkDataboxDataType type, guint dotSize)
211 {
212 return gtk_databox_data_add_y(GTK_DATABOX(widget), length,
213 Y, indexSharedX,
214 (GdkColor)*(color->Color()),
215 type, dotSize);
216 }
217
218 /*****************************
219 * Signal handling functions *
220 *****************************/
221 gint
_zoomed(GtkDatabox *,GtkDataboxValue * top_left,GtkDataboxValue * bottom_right,gpointer gp)222 VDKDataBox::_zoomed(GtkDatabox *,
223 GtkDataboxValue *top_left,
224 GtkDataboxValue *bottom_right,
225 gpointer gp)
226 {
227 g_return_val_if_fail(gp != NULL,TRUE);
228 VDKDataBox *obj = reinterpret_cast<VDKDataBox*>(gp);
229
230 obj->TopLeft(*top_left);
231 obj->BottomRight(*bottom_right);
232 obj->SignalEmitParent(databox_zoomed_signal);
233 obj->SignalEmitParent("databox_zoomed");
234
235 return 0;
236 }
237
238 gint
_marked(GtkDatabox *,GtkDataboxCoord * mark,gpointer gp)239 VDKDataBox::_marked(GtkDatabox *,
240 GtkDataboxCoord *mark,
241 gpointer gp)
242 {
243 g_return_val_if_fail(gp != NULL,TRUE);
244 VDKDataBox *obj = reinterpret_cast<VDKDataBox*>(gp);
245
246 obj->Mark(*mark);
247 obj->SignalEmitParent(databox_marked_signal);
248 obj->SignalEmitParent("databox_marked");
249
250 return 0;
251 }
252
253 gint
_selectionStarted(GtkDatabox *,GtkDataboxCoord * mark,gpointer gp)254 VDKDataBox::_selectionStarted(GtkDatabox *,
255 GtkDataboxCoord *mark,
256 gpointer gp)
257 {
258 g_return_val_if_fail(gp != NULL,TRUE);
259 VDKDataBox *obj = reinterpret_cast<VDKDataBox*>(gp);
260
261 obj->Mark(*mark);
262 obj->SignalEmitParent(databox_selection_started_signal);
263 obj->SignalEmitParent("databox_selection_started");
264
265 return 0;
266 }
267
268 gint
_selectionChanged(GtkDatabox *,GtkDataboxCoord * mark,GtkDataboxCoord * select,gpointer gp)269 VDKDataBox::_selectionChanged(GtkDatabox *,
270 GtkDataboxCoord *mark,
271 GtkDataboxCoord *select,
272 gpointer gp)
273 {
274 g_return_val_if_fail(gp != NULL,TRUE);
275 VDKDataBox *obj = reinterpret_cast<VDKDataBox*>(gp);
276
277 obj->Mark(*mark);
278 obj->Select(*select);
279 obj->SignalEmitParent(databox_selection_changed_signal);
280 obj->SignalEmitParent("databox_selection_changed");
281
282 return 0;
283 }
284
285 gint
_selectionStoped(GtkDatabox *,GtkDataboxCoord * mark,GtkDataboxCoord * select,gpointer gp)286 VDKDataBox::_selectionStoped(GtkDatabox *,
287 GtkDataboxCoord *mark,
288 GtkDataboxCoord *select,
289 gpointer gp)
290 {
291 g_return_val_if_fail(gp != NULL,TRUE);
292 VDKDataBox *obj = reinterpret_cast<VDKDataBox*>(gp);
293
294 obj->Mark(*mark);
295 obj->Select(*select);
296 obj->SignalEmitParent(databox_selection_stopped_signal);
297 obj->SignalEmitParent("databox_selection_stopped");
298
299 return 0;
300 }
301
302 gint
_selectionCanceled(GtkDatabox *,gpointer gp)303 VDKDataBox::_selectionCanceled(GtkDatabox *,
304 gpointer gp)
305 {
306 g_return_val_if_fail(gp != NULL,TRUE);
307 VDKDataBox *obj = reinterpret_cast<VDKDataBox*>(gp);
308
309 obj->SignalEmitParent(databox_selection_canceled_signal);
310 obj->SignalEmitParent("databox_selection_canceled");
311
312 return 0;
313 }
314 /*
315 */
316 void
SetBackground(VDKRgb color,GtkStateType state)317 VDKDataBox::SetBackground(VDKRgb color, GtkStateType state)
318 {
319 if(!widget) return;
320 _setBackground_(GTK_DATABOX(widget)->draw,
321 color.red,color.green,color.blue, state);
322 }
323