Mercurial > dwindows
annotate gtk/dw.c @ 29:a33dfdc5b40a
Forgot to add the EMX .def file.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 17 Aug 2001 12:25:52 +0000 |
parents | 6a246b3bb14f |
children | b1d7e8a28dfa |
rev | line source |
---|---|
3 | 1 /* |
2 * Dynamic Windows: | |
3 * A GTK like implementation of the PM GUI | |
4 * GTK forwarder module for portabilty. | |
5 * | |
6 * (C) 2000,2001 Brian Smith <dbsoft@technologist.com> | |
7 * | |
8 */ | |
9 #include "dw.h" | |
10 #include <string.h> | |
11 #include <stdlib.h> | |
12 #include <sys/utsname.h> | |
13 #include <stdarg.h> | |
14 #include <stdio.h> | |
15 #include <unistd.h> | |
16 #include <errno.h> | |
17 #include <sys/time.h> | |
18 #include "config.h" | |
19 #ifdef USE_IMLIB | |
20 #include <gdk_imlib.h> | |
21 #endif | |
22 | |
23 /* These are used for resource management */ | |
24 #if defined(DW_RESOURCES) && !defined(BUILD_DLL) | |
25 extern DWResources _resources; | |
26 #endif | |
27 | |
28 char monthlist[][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", | |
29 "Sep", "Oct", "Nov", "Dec" }; | |
30 GdkColor _colors[] = | |
31 { | |
32 { 0, 0x0000, 0x0000, 0x0000 }, /* 0 black */ | |
33 { 0, 0xbbbb, 0x0000, 0x0000 }, /* 1 red */ | |
34 { 0, 0x0000, 0xbbbb, 0x0000 }, /* 2 green */ | |
35 { 0, 0xaaaa, 0xaaaa, 0x0000 }, /* 3 yellow */ | |
36 { 0, 0x0000, 0x0000, 0xcccc }, /* 4 blue */ | |
37 { 0, 0xbbbb, 0x0000, 0xbbbb }, /* 5 magenta */ | |
38 { 0, 0x0000, 0xbbbb, 0xbbbb }, /* 6 cyan */ | |
39 { 0, 0xaaaa, 0xaaaa, 0xaaaa }, /* 7 white */ | |
40 { 0, 0x7777, 0x7777, 0x7777 }, /* 8 grey */ | |
41 { 0, 0xffff, 0x0000, 0x0000 }, /* 9 bright red */ | |
42 { 0, 0x0000, 0xffff, 0x0000 }, /* 10 bright green */ | |
43 { 0, 0xeeee, 0xeeee, 0x0000 }, /* 11 bright yellow */ | |
44 { 0, 0x0000, 0x0000, 0xffff }, /* 12 bright blue */ | |
45 { 0, 0xffff, 0x0000, 0xffff }, /* 13 bright magenta */ | |
46 { 0, 0x0000, 0xeeee, 0xeeee }, /* 14 bright cyan */ | |
47 { 0, 0xffff, 0xffff, 0xffff }, /* 15 bright white */ | |
48 }; | |
49 | |
50 GdkColor _foreground = { 0, 0x0000, 0x0000, 0x0000 }; | |
51 GdkColor _background = { 0, 0xaaaa, 0xaaaa, 0xaaaa }; | |
52 | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
53 int _dw_file_active = 0, _dw_ignore_click = 0; |
3 | 54 pthread_t _dw_thread = (pthread_t)-1; |
55 int _dw_mutex_locked = FALSE; | |
56 | |
57 #define DW_MUTEX_LOCK { if(pthread_self() != _dw_thread && _dw_mutex_locked == FALSE) { gdk_threads_enter(); _dw_mutex_locked = TRUE; _locked_by_me = TRUE; } } | |
58 #define DW_MUTEX_UNLOCK { if(pthread_self() != _dw_thread && _locked_by_me == TRUE) { gdk_threads_leave(); _dw_mutex_locked = FALSE; _locked_by_me = FALSE; } } | |
59 | |
60 /* Currently the non Imlib method does not work */ | |
61 #ifndef USE_IMLIB | |
62 #define USE_IMLIB | |
63 #endif | |
64 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
65 #define DEFAULT_SIZE_WIDTH 12 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
66 #define DEFAULT_SIZE_HEIGHT 6 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
67 #define DEFAULT_TITLEBAR_HEIGHT 22 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
68 |
3 | 69 GdkColormap *_dw_cmap = NULL; |
70 | |
71 /* Signal forwarder prototypes */ | |
72 gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data); | |
73 gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data); | |
74 gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data); | |
75 gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data); | |
76 gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data); | |
77 gint _generic_event(GtkWidget *widget, gpointer data); | |
78 gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data); | |
79 void _activate_event(GtkWidget *widget, gpointer data); | |
80 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data); | |
81 void _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data); | |
82 void _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data); | |
83 void _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
84 void _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); |
3 | 85 |
86 typedef struct | |
87 { | |
88 void *func; | |
89 char name[30]; | |
90 | |
91 } SignalList; | |
92 | |
93 typedef struct | |
94 { | |
95 HWND window; | |
96 void *func; | |
97 gpointer data; | |
98 | |
99 } SignalHandler; | |
100 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
101 #define SIGNALMAX 13 |
3 | 102 |
103 /* A list of signal forwarders, to account for paramater differences. */ | |
104 SignalList SignalTranslate[SIGNALMAX] = { | |
105 { _configure_event, "configure_event" }, | |
106 { _key_press_event, "key_press_event" }, | |
107 { _button_press_event, "button_press_event" }, | |
108 { _button_release_event, "button_release_event" }, | |
109 { _motion_notify_event, "motion_notify_event" }, | |
110 { _delete_event, "delete_event" }, | |
111 { _expose_event, "expose_event" }, | |
112 { _activate_event, "activate" }, | |
113 { _generic_event, "clicked" }, | |
114 { _container_select_event, "container-select" }, | |
115 { _container_context_event, "container-context" }, | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
116 { _item_select_event, "item-select" }, |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
117 { _set_focus_event, "set-focus" } |
3 | 118 }; |
119 | |
120 /* Finds the translation function for a given signal name */ | |
121 void *_findsigfunc(char *signame) | |
122 { | |
123 int z; | |
124 | |
125 for(z=0;z<SIGNALMAX;z++) | |
126 { | |
127 if(strcasecmp(signame, SignalTranslate[z].name) == 0) | |
128 return SignalTranslate[z].func; | |
129 } | |
130 return NULL; | |
131 } | |
132 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
133 void _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
134 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
135 SignalHandler *work = (SignalHandler *)data; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
136 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
137 if(work) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
138 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
139 int (*setfocusfunc)(HWND, void *) = work->func; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
140 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
141 setfocusfunc((HWND)window, work->data); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
142 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
143 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
144 |
3 | 145 gint _button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) |
146 { | |
147 SignalHandler *work = (SignalHandler *)data; | |
148 | |
149 if(work) | |
150 { | |
151 int (*buttonfunc)(HWND, int, int, int, void *) = work->func; | |
152 int mybutton = event->button; | |
153 | |
154 if(event->button == 3) | |
155 mybutton = 2; | |
156 else if(event->button == 2) | |
157 mybutton = 3; | |
158 | |
159 buttonfunc(widget, event->x, event->y, mybutton, work->data); | |
160 } | |
161 return TRUE; | |
162 } | |
163 | |
164 gint _button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | |
165 { | |
166 SignalHandler *work = (SignalHandler *)data; | |
167 | |
168 if(work) | |
169 { | |
170 int (*buttonfunc)(HWND, int, int, int, void *) = work->func; | |
171 int mybutton = event->button; | |
172 | |
173 if(event->button == 3) | |
174 mybutton = 2; | |
175 else if(event->button == 2) | |
176 mybutton = 3; | |
177 | |
178 buttonfunc(widget, event->x, event->y, mybutton, work->data); | |
179 } | |
180 return TRUE; | |
181 } | |
182 | |
183 gint _motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) | |
184 { | |
185 SignalHandler *work = (SignalHandler *)data; | |
186 | |
187 if(work) | |
188 { | |
189 int (*motionfunc)(HWND, int, int, int, void *) = work->func; | |
190 int keys = 0, x, y; | |
191 GdkModifierType state; | |
192 | |
193 if (event->is_hint) | |
194 gdk_window_get_pointer (event->window, &x, &y, &state); | |
195 else | |
196 { | |
197 x = event->x; | |
198 y = event->y; | |
199 state = event->state; | |
200 } | |
201 | |
202 if (state & GDK_BUTTON1_MASK) | |
203 keys = DW_BUTTON1_MASK; | |
204 if (state & GDK_BUTTON3_MASK) | |
205 keys |= DW_BUTTON2_MASK; | |
206 if (state & GDK_BUTTON2_MASK) | |
207 keys |= DW_BUTTON3_MASK; | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
208 |
3 | 209 motionfunc(widget, x, y, keys, work->data); |
210 } | |
211 return TRUE; | |
212 } | |
213 | |
214 gint _delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) | |
215 { | |
216 SignalHandler *work = (SignalHandler *)data; | |
217 | |
218 if(work) | |
219 { | |
220 int (*closefunc)(HWND, void *) = work->func; | |
221 | |
222 closefunc(widget, data); | |
223 } | |
224 return TRUE; | |
225 } | |
226 | |
227 gint _key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) | |
228 { | |
229 SignalHandler *work = (SignalHandler *)data; | |
230 | |
231 if(work) | |
232 { | |
233 int (*keypressfunc)(HWND, int, void *) = work->func; | |
234 | |
235 keypressfunc(widget, *event->string, work->data); | |
236 } | |
237 return TRUE; | |
238 } | |
239 | |
240 gint _generic_event(GtkWidget *widget, gpointer data) | |
241 { | |
242 SignalHandler *work = (SignalHandler *)data; | |
243 | |
244 if(work) | |
245 { | |
246 int (*genericfunc)(HWND, void *) = work->func; | |
247 | |
248 genericfunc(widget, work->data); | |
249 } | |
250 return TRUE; | |
251 } | |
252 | |
253 void _activate_event(GtkWidget *widget, gpointer data) | |
254 { | |
255 SignalHandler *work = (SignalHandler *)data; | |
256 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
257 if(work && !_dw_ignore_click) |
3 | 258 { |
259 void (*activatefunc)(HWND, void *) = work->func; | |
260 | |
261 activatefunc(work->window, work->data); | |
262 } | |
263 return; | |
264 } | |
265 | |
266 gint _configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) | |
267 { | |
268 SignalHandler *work = (SignalHandler *)data; | |
269 | |
270 if(work) | |
271 { | |
272 int (*sizefunc)(HWND, int, int, void *) = work->func; | |
273 | |
274 sizefunc(widget, event->width, event->height, work->data); | |
275 } | |
276 return TRUE; | |
277 } | |
278 | |
279 void _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) | |
280 { | |
281 SignalHandler *work = (SignalHandler *)data; | |
282 | |
283 if(work) | |
284 { | |
285 DWExpose exp; | |
286 int (*exposefunc)(HWND, DWExpose *, void *) = work->func; | |
287 | |
288 exp.x = event->area.x; | |
289 exp.y = event->area.y; | |
290 exp.width = event->area.width; | |
291 exp.height = event->area.height; | |
292 exposefunc(widget, &exp, work->data); | |
293 } | |
294 } | |
295 | |
296 void _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data) | |
297 { | |
298 SignalHandler *work = (SignalHandler *)data; | |
299 | |
300 if(work) | |
301 { | |
302 int (*selectfunc)(HWND, int, void *) = work->func; | |
303 GList *list; | |
304 int item = 0; | |
305 | |
306 if(GTK_IS_COMBO(work->window)) | |
307 list = GTK_LIST(GTK_COMBO(work->window)->list)->children; | |
308 else if(GTK_IS_LIST(widget)) | |
309 list = GTK_LIST(widget)->children; | |
310 else | |
311 return; | |
312 | |
313 while(list) | |
314 { | |
315 if(list->data == (gpointer)child) | |
316 { | |
317 gtk_object_set_data(GTK_OBJECT(work->window), "item", (gpointer)item); | |
318 selectfunc(work->window, item, work->data); | |
319 break; | |
320 } | |
321 item++; | |
322 list = list->next; | |
323 } | |
324 } | |
325 } | |
326 | |
327 void _container_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | |
328 { | |
329 SignalHandler *work = (SignalHandler *)data; | |
330 | |
331 if(work) | |
332 { | |
333 if(event->button == 3) | |
334 { | |
335 void (*contextfunc)(HWND, char *, int, int, void *) = work->func; | |
336 char *text; | |
337 int row, col; | |
338 | |
339 gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); | |
340 | |
341 text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); | |
342 contextfunc(work->window, text, event->x, event->y, work->data); | |
343 } | |
344 } | |
345 } | |
346 | |
347 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) | |
348 { | |
349 SignalHandler *work = (SignalHandler *)data; | |
350 | |
351 if(work) | |
352 { | |
353 if(event->button == 1 && event->type == GDK_2BUTTON_PRESS) | |
354 { | |
355 void (*contextfunc)(HWND, char *, void *) = work->func; | |
356 char *text; | |
357 int row, col; | |
358 | |
359 gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); | |
360 | |
361 text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); | |
362 contextfunc(work->window, text, work->data); | |
363 } | |
364 } | |
365 } | |
366 | |
367 void _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) | |
368 { | |
369 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist"); | |
370 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); | |
371 | |
372 if(rowdata) | |
373 { | |
374 tmp = g_list_append(tmp, rowdata); | |
375 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); | |
376 } | |
377 | |
378 } | |
379 | |
380 void _unselect_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) | |
381 { | |
382 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist"); | |
383 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); | |
384 | |
385 if(rowdata) | |
386 { | |
387 g_list_remove(tmp, rowdata); | |
388 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); | |
389 } | |
390 } | |
391 | |
392 GdkPixmap *_find_pixmap(GdkBitmap **bitmap, long id, HWND handle) | |
393 { | |
394 char *data = NULL; | |
395 int z; | |
396 | |
397 for(z=0;z<_resources.resource_max;z++) | |
398 { | |
399 if(_resources.resource_id[z] == id) | |
400 { | |
401 data = _resources.resource_data[z]; | |
402 break; | |
403 } | |
404 } | |
405 | |
406 if(data) | |
407 { | |
408 GdkPixmap *icon_pixmap = NULL; | |
409 #ifndef USE_IMLIB | |
410 GtkStyle *iconstyle; | |
411 | |
412 /* hmmm why do we need the handle here? */ | |
413 iconstyle = gtk_widget_get_style(handle); | |
414 if (!icon_pixmap) | |
415 icon_pixmap = gdk_pixmap_create_from_xpm_d(handle->window, bitmap, &iconstyle->bg[GTK_STATE_NORMAL], &data); | |
416 #else | |
417 gdk_imlib_data_to_pixmap((char **)data, &icon_pixmap, bitmap); | |
418 #endif | |
419 return icon_pixmap; | |
420 } | |
421 return NULL; | |
422 } | |
423 | |
424 void _size_allocate(GtkWindow *window) | |
425 { | |
426 XSizeHints sizehints; | |
427 | |
428 sizehints.base_width = 1; | |
429 sizehints.base_height = 1; | |
430 sizehints.width_inc = 1; | |
431 sizehints.height_inc = 1; | |
432 sizehints.min_width = 8; | |
433 sizehints.min_height = 8; | |
434 | |
435 sizehints.flags = (PBaseSize|PMinSize|PResizeInc); | |
436 | |
437 XSetWMNormalHints (GDK_DISPLAY(), | |
438 GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window), | |
439 &sizehints); | |
440 gdk_flush (); | |
441 } | |
442 | |
443 /* | |
444 * Initializes the Dynamic Windows engine. | |
445 * Parameters: | |
446 * newthread: True if this is the only thread. | |
447 * False if there is already a message loop running. | |
448 */ | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
449 int dw_int_init(DWResources *res, int newthread, int argc, char *argv[]) |
3 | 450 { |
451 int z; | |
452 | |
453 if(res) | |
454 { | |
455 _resources.resource_max = res->resource_max; | |
456 _resources.resource_id = res->resource_id; | |
457 _resources.resource_data = res->resource_data; | |
458 } | |
459 gtk_set_locale(); | |
460 g_thread_init(NULL); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
461 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
462 gtk_init(&argc, &argv); |
3 | 463 #ifdef USE_IMLIB |
464 gdk_imlib_init(); | |
465 #endif | |
466 /* Add colors to the system colormap */ | |
467 _dw_cmap = gdk_colormap_get_system(); | |
468 for(z=0;z<16;z++) | |
469 gdk_color_alloc(_dw_cmap, &_colors[z]); | |
470 return TRUE; | |
471 } | |
472 | |
473 /* | |
474 * Runs a message loop for Dynamic Windows. | |
475 * Parameters: | |
476 * currenthab: The handle to the current anchor block | |
477 * or NULL if this DW is handling the message loop. | |
478 * func: Function pointer to the message filter function. | |
479 */ | |
480 void dw_main(HAB currenthab, void *func) | |
481 { | |
482 _dw_thread = pthread_self(); | |
483 gdk_threads_enter(); | |
484 gtk_main(); | |
485 gdk_threads_leave(); | |
486 } | |
487 | |
488 /* | |
489 * Free's memory allocated by dynamic windows. | |
490 * Parameters: | |
491 * ptr: Pointer to dynamic windows allocated | |
492 * memory to be free()'d. | |
493 */ | |
494 void dw_free(void *ptr) | |
495 { | |
496 free(ptr); | |
497 } | |
498 | |
499 /* | |
500 * Allocates and initializes a dialog struct. | |
501 * Parameters: | |
502 * data: User defined data to be passed to functions. | |
503 */ | |
504 DWDialog *dw_dialog_new(void *data) | |
505 { | |
506 DWDialog *tmp = malloc(sizeof(DWDialog)); | |
507 | |
508 tmp->eve = dw_event_new(); | |
509 dw_event_reset(tmp->eve); | |
510 tmp->data = data; | |
511 tmp->done = FALSE; | |
512 tmp->result = NULL; | |
513 | |
514 return tmp; | |
515 } | |
516 | |
517 /* | |
518 * Accepts a dialog struct and returns the given data to the | |
519 * initial called of dw_dialog_wait(). | |
520 * Parameters: | |
521 * dialog: Pointer to a dialog struct aquired by dw_dialog_new). | |
522 * result: Data to be returned by dw_dialog_wait(). | |
523 */ | |
524 int dw_dialog_dismiss(DWDialog *dialog, void *result) | |
525 { | |
526 dialog->result = result; | |
527 if(pthread_self() == _dw_thread) | |
528 gtk_main_quit(); | |
529 else | |
530 dw_event_post(dialog->eve); | |
531 dialog->done = TRUE; | |
532 return 0; | |
533 } | |
534 | |
535 /* | |
536 * Accepts a dialog struct waits for dw_dialog_dismiss() to be | |
537 * called by a signal handler with the given dialog struct. | |
538 * Parameters: | |
539 * dialog: Pointer to a dialog struct aquired by dw_dialog_new). | |
540 */ | |
541 void *dw_dialog_wait(DWDialog *dialog) | |
542 { | |
543 void *tmp; | |
544 | |
545 if(pthread_self() == _dw_thread) | |
546 gtk_main(); | |
547 else | |
548 dw_event_wait(dialog->eve, -1); | |
549 | |
550 dw_event_close(&dialog->eve); | |
551 tmp = dialog->result; | |
552 free(dialog); | |
553 return tmp; | |
554 } | |
555 | |
556 void _delete(GtkWidget *widget, GtkWidget *event, gpointer param) | |
557 { | |
558 gtk_widget_destroy(GTK_WIDGET(param)); | |
559 } | |
560 | |
561 void _delete2(GtkWidget *widget, gpointer param) | |
562 { | |
563 gtk_widget_destroy(GTK_WIDGET(param)); | |
564 } | |
565 | |
566 | |
567 /* | |
568 * Displays a Message Box with given text and title.. | |
569 * Parameters: | |
570 * title: The title of the message box. | |
571 * format: printf style format string. | |
572 * ...: Additional variables for use in the format. | |
573 */ | |
574 int dw_messagebox(char *title, char *format, ...) | |
575 { | |
576 va_list args; | |
577 char outbuf[256]; | |
578 GtkWidget *dialog, | |
579 *button, | |
580 *label; | |
581 int _locked_by_me = FALSE; | |
582 | |
583 DW_MUTEX_LOCK; | |
584 va_start(args, format); | |
585 vsprintf(outbuf, format, args); | |
586 va_end(args); | |
587 | |
588 dialog = gtk_dialog_new(); | |
589 | |
590 gtk_window_set_title(GTK_WINDOW(dialog), title); | |
591 | |
592 button = gtk_button_new_with_label("Ok"); | |
593 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); | |
594 gtk_widget_show(button); | |
595 | |
596 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(_delete2), (gpointer)dialog); | |
597 gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", GTK_SIGNAL_FUNC(_delete), (gpointer)dialog); | |
598 | |
599 label = gtk_label_new(outbuf); | |
600 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 20); | |
601 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); | |
602 gtk_widget_show(label); | |
603 | |
604 gtk_widget_show(dialog); | |
605 | |
606 DW_MUTEX_UNLOCK; | |
607 | |
608 return strlen(outbuf); | |
609 } | |
610 | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
611 void _dw_yes_func(HWND window, void *data) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
612 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
613 DWDialog *dwwait = (DWDialog *)data; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
614 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
615 if(!dwwait) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
616 return; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
617 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
618 dw_window_destroy((HWND)dwwait->data); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
619 dw_dialog_dismiss((DWDialog *)data, (void *)1); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
620 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
621 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
622 void _dw_no_func(HWND window, void *data) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
623 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
624 DWDialog *dwwait = (DWDialog *)data; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
625 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
626 if(!dwwait) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
627 return; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
628 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
629 dw_window_destroy((HWND)dwwait->data); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
630 dw_dialog_dismiss((DWDialog *)data, (void *)0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
631 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
632 |
3 | 633 /* |
634 * Displays a Message Box with given text and title.. | |
635 * Parameters: | |
636 * title: The title of the message box. | |
637 * text: The text to display in the box. | |
638 * Returns: | |
639 * True if YES False of NO. | |
640 */ | |
641 int dw_yesno(char *title, char *text) | |
642 { | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
643 HWND entrywindow, mainbox, nobutton, yesbutton, buttonbox, stext; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
644 ULONG flStyle = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_DLGBORDER; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
645 DWDialog *dwwait; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
646 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
647 entrywindow = dw_window_new(HWND_DESKTOP, title, flStyle); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
648 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
649 mainbox = dw_box_new(BOXVERT, 10); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
650 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
651 dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
652 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
653 /* Archive Name */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
654 stext = dw_text_new(text, 0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
655 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
656 dw_box_pack_start(mainbox, stext, 130, 20, TRUE, TRUE, 2); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
657 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
658 /* Buttons */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
659 buttonbox = dw_box_new(BOXHORZ, 10); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
660 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
661 dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, TRUE, 0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
662 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
663 yesbutton = dw_button_new("Yes", 1001L); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
664 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
665 dw_box_pack_start(buttonbox, yesbutton, 130, 30, TRUE, TRUE, 2); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
666 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
667 nobutton = dw_button_new("No", 1002L); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
668 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
669 dw_box_pack_start(buttonbox, nobutton, 130, 30, TRUE, TRUE, 2); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
670 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
671 dwwait = dw_dialog_new((void *)entrywindow); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
672 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
673 dw_signal_connect(yesbutton, "clicked", DW_SIGNAL_FUNC(_dw_yes_func), (void *)dwwait); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
674 dw_signal_connect(nobutton, "clicked", DW_SIGNAL_FUNC(_dw_no_func), (void *)dwwait); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
675 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
676 dw_window_set_usize(entrywindow, 340, 150); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
677 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
678 dw_window_show(entrywindow); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
679 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
680 return (int)dw_dialog_wait(dwwait);; |
3 | 681 } |
682 | |
683 /* | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
684 * Minimizes or Iconifies a top-level window. |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
685 * Parameters: |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
686 * handle: The window handle to minimize. |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
687 */ |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
688 int dw_window_minimize(HWND handle) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
689 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
690 int _locked_by_me = FALSE; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
691 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
692 if(!handle) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
693 return 0; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
694 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
695 DW_MUTEX_LOCK; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
696 XIconifyWindow(GDK_WINDOW_XDISPLAY(GTK_WIDGET(handle)->window), |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
697 GDK_WINDOW_XWINDOW(GTK_WIDGET(handle)->window), |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
698 DefaultScreen (GDK_DISPLAY ())); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
699 DW_MUTEX_UNLOCK; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
700 return 0; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
701 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
702 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
703 /* |
3 | 704 * Makes the window visible. |
705 * Parameters: | |
706 * handle: The window handle to make visible. | |
707 */ | |
708 int dw_window_show(HWND handle) | |
709 { | |
710 int _locked_by_me = FALSE; | |
711 | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
712 if(!handle) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
713 return 0; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
714 |
3 | 715 DW_MUTEX_LOCK; |
716 gtk_widget_show(handle); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
717 gdk_window_raise(GTK_WIDGET(handle)->window); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
718 gdk_flush(); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
719 gdk_window_show(GTK_WIDGET(handle)->window); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
720 gdk_flush(); |
3 | 721 DW_MUTEX_UNLOCK; |
722 return 0; | |
723 } | |
724 | |
725 /* | |
726 * Makes the window invisible. | |
727 * Parameters: | |
728 * handle: The window handle to make visible. | |
729 */ | |
730 int dw_window_hide(HWND handle) | |
731 { | |
732 int _locked_by_me = FALSE; | |
733 | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
734 if(!handle) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
735 return 0; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
736 |
3 | 737 DW_MUTEX_LOCK; |
738 gtk_widget_hide(handle); | |
739 DW_MUTEX_UNLOCK; | |
740 return 0; | |
741 } | |
742 | |
743 /* | |
744 * Destroys a window and all of it's children. | |
745 * Parameters: | |
746 * handle: The window handle to destroy. | |
747 */ | |
748 int dw_window_destroy(HWND handle) | |
749 { | |
750 int _locked_by_me = FALSE; | |
751 | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
752 if(!handle) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
753 return 0; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
754 |
3 | 755 DW_MUTEX_LOCK; |
17
f26eced21a30
Some more updates.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
15
diff
changeset
|
756 if(GTK_IS_WIDGET(handle)) |
f26eced21a30
Some more updates.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
15
diff
changeset
|
757 gtk_widget_destroy(handle); |
3 | 758 DW_MUTEX_UNLOCK; |
759 return 0; | |
760 } | |
761 | |
762 /* | |
763 * Changes a window's parent to newparent. | |
764 * Parameters: | |
765 * handle: The window handle to destroy. | |
766 * newparent: The window's new parent window. | |
767 */ | |
768 void dw_window_reparent(HWND handle, HWND newparent) | |
769 { | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
770 int _locked_by_me = FALSE; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
771 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
772 DW_MUTEX_LOCK; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
773 gdk_window_reparent(GTK_WIDGET(handle)->window, newparent ? GTK_WIDGET(newparent)->window : GDK_ROOT_PARENT(), 0, 0); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
774 DW_MUTEX_UNLOCK; |
3 | 775 } |
776 | |
777 int _set_font(HWND handle, char *fontname) | |
778 { | |
779 GtkStyle *style; | |
780 GdkFont *font = NULL; | |
781 int retval = FALSE; | |
782 | |
783 font = gdk_font_load(fontname); | |
784 | |
785 if(font) | |
786 { | |
787 style = gtk_widget_get_style(handle); | |
788 style->font = font; | |
789 gtk_widget_set_style(handle, style); | |
790 retval = TRUE; | |
791 } | |
792 return retval; | |
793 } | |
794 | |
795 /* | |
796 * Sets the font used by a specified window (widget) handle. | |
797 * Parameters: | |
798 * handle: The window (widget) handle. | |
799 * fontname: Name and size of the font in the form "size.fontname" | |
800 */ | |
801 int dw_window_set_font(HWND handle, char *fontname) | |
802 { | |
803 GtkWidget *handle2 = handle; | |
804 char *font; | |
805 int _locked_by_me = FALSE; | |
806 gpointer data; | |
807 | |
808 DW_MUTEX_LOCK; | |
809 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
810 { | |
811 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
812 if(tmp) | |
813 handle2 = tmp; | |
814 } | |
815 font = strdup(fontname); | |
816 | |
817 data = gtk_object_get_data(GTK_OBJECT(handle2), "fontname"); | |
818 if(data) | |
819 free(data); | |
820 | |
821 if(font) | |
822 gtk_object_set_data(GTK_OBJECT(handle2), "fontname", (gpointer)font); | |
823 | |
824 DW_MUTEX_UNLOCK; | |
825 return TRUE; | |
826 } | |
827 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
828 void _free_gdk_colors(HWND handle) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
829 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
830 GdkColor *old = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "foregdk"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
831 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
832 if(old) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
833 free(old); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
834 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
835 old = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle), "backgdk"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
836 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
837 if(old) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
838 free(old); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
839 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
840 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
841 /* Free old color pointers and allocate new ones */ |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
842 void _save_gdk_colors(HWND handle, GdkColor fore, GdkColor back) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
843 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
844 GdkColor *foregdk = malloc(sizeof(GdkColor)); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
845 GdkColor *backgdk = malloc(sizeof(GdkColor)); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
846 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
847 _free_gdk_colors(handle); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
848 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
849 *foregdk = fore; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
850 *backgdk = back; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
851 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
852 gtk_object_set_data(GTK_OBJECT(handle), "foregdk", (gpointer)foregdk); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
853 gtk_object_set_data(GTK_OBJECT(handle), "backgdk", (gpointer)backgdk); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
854 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
855 |
3 | 856 int _set_color(HWND handle, unsigned long fore, unsigned long back) |
857 { | |
858 GtkStyle *style; | |
859 | |
860 if(fore & DW_RGB_COLOR || back & DW_RGB_COLOR) | |
861 { | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
862 /* Remember that each color component in X11 use 16 bit no matter |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
863 * what the destination display supports. (and thus GDK) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
864 */ |
3 | 865 GdkColor forecolor = { 0, DW_RED_VALUE(fore) << 8, DW_GREEN_VALUE(fore) << 8, DW_BLUE_VALUE(fore) << 8 }; |
866 GdkColor backcolor = { 0, DW_RED_VALUE(back) << 8, DW_GREEN_VALUE(back) << 8, DW_BLUE_VALUE(back) << 8 }; | |
867 | |
868 gdk_color_alloc(_dw_cmap, &forecolor); | |
869 gdk_color_alloc(_dw_cmap, &backcolor); | |
870 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
871 style = gtk_style_copy(gtk_widget_get_style(handle)); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
872 style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor; |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
873 style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor; |
3 | 874 gtk_widget_set_style(handle, style); |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
875 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
876 _save_gdk_colors(handle, forecolor, backcolor); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
877 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
878 if(GTK_IS_CLIST(handle)) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
879 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
880 int z, rowcount = (int)gtk_object_get_data(GTK_OBJECT(handle), "rowcount"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
881 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
882 for(z=0;z<rowcount;z++) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
883 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
884 gtk_clist_set_foreground(GTK_CLIST(handle), z, &forecolor); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
885 gtk_clist_set_background(GTK_CLIST(handle), z, &backcolor); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
886 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
887 } |
3 | 888 } |
889 else | |
890 { | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
891 style = gtk_style_copy(gtk_widget_get_style(handle)); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
892 style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = _colors[fore]; |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
893 style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = _colors[back]; |
3 | 894 gtk_widget_set_style(handle, style); |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
895 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
896 _save_gdk_colors(handle, _colors[fore], _colors[back]); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
897 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
898 if(GTK_IS_CLIST(handle)) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
899 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
900 int z, rowcount = (int)gtk_object_get_data(GTK_OBJECT(handle), "rowcount"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
901 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
902 for(z=0;z<rowcount;z++) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
903 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
904 gtk_clist_set_foreground(GTK_CLIST(handle), z, &_colors[fore]); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
905 gtk_clist_set_background(GTK_CLIST(handle), z, &_colors[back]); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
906 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
907 } |
3 | 908 } |
909 | |
910 return TRUE; | |
911 } | |
912 /* | |
913 * Sets the colors used by a specified window (widget) handle. | |
914 * Parameters: | |
915 * handle: The window (widget) handle. | |
916 * fore: Foreground color in RGB format. | |
917 * back: Background color in RGB format. | |
918 */ | |
919 int dw_window_set_color(HWND handle, unsigned long fore, unsigned long back) | |
920 { | |
921 GtkWidget *handle2 = handle; | |
922 int _locked_by_me = FALSE; | |
923 | |
924 DW_MUTEX_LOCK; | |
925 | |
926 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
927 { | |
928 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
929 if(tmp) | |
930 handle2 = tmp; | |
931 } | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
932 else if(GTK_IS_BOX(handle)) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
933 { |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
934 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
935 if(tmp) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
936 handle2 = tmp; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
937 } |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
938 |
3 | 939 _set_color(handle2, fore, back); |
940 | |
941 DW_MUTEX_UNLOCK; | |
942 return TRUE; | |
943 } | |
944 | |
945 /* | |
946 * Sets the font used by a specified window (widget) handle. | |
947 * Parameters: | |
948 * handle: The window (widget) handle. | |
949 * border: Size of the window border in pixels. | |
950 */ | |
951 int dw_window_set_border(HWND handle, int border) | |
952 { | |
953 /* TODO */ | |
954 return 0; | |
955 } | |
956 | |
957 /* | |
958 * Captures the mouse input to this window. | |
959 * Parameters: | |
960 * handle: Handle to receive mouse input. | |
961 */ | |
962 void dw_window_capture(HWND handle) | |
963 { | |
964 int _locked_by_me = FALSE; | |
965 | |
966 DW_MUTEX_LOCK; | |
967 gdk_pointer_grab(handle->window, TRUE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK, NULL, NULL, GDK_CURRENT_TIME); | |
968 DW_MUTEX_UNLOCK; | |
969 } | |
970 | |
971 /* | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
972 * Changes the appearance of the mouse pointer. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
973 * Parameters: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
974 * handle: Handle to widget for which to change. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
975 * cursortype: ID of the pointer you want. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
976 */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
977 void dw_window_pointer(HWND handle, int pointertype) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
978 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
979 GdkCursor *cursor = gdk_cursor_new(pointertype); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
980 gdk_window_set_cursor(handle->window, cursor); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
981 gdk_cursor_destroy(cursor); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
982 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
983 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
984 /* |
3 | 985 * Releases previous mouse capture. |
986 */ | |
987 void dw_window_release(void) | |
988 { | |
989 int _locked_by_me = FALSE; | |
990 | |
991 DW_MUTEX_LOCK; | |
992 gdk_pointer_ungrab(GDK_CURRENT_TIME); | |
993 DW_MUTEX_UNLOCK; | |
994 } | |
995 | |
996 /* | |
997 * Create a new Window Frame. | |
998 * Parameters: | |
999 * owner: The Owner's window handle or HWND_DESKTOP. | |
1000 * title: The Window title. | |
1001 * flStyle: Style flags, see the PM reference. | |
1002 */ | |
1003 HWND dw_window_new(HWND hwndOwner, char *title, unsigned long flStyle) | |
1004 { | |
1005 GtkWidget *tmp; | |
1006 int _locked_by_me = FALSE; | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1007 int flags = 0, cx = 0, cy = 0; |
3 | 1008 |
1009 DW_MUTEX_LOCK; | |
1010 tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
1011 | |
1012 gtk_window_set_title(GTK_WINDOW(tmp), title); | |
1013 if(!(flStyle & DW_FCF_SIZEBORDER)) | |
1014 gtk_window_set_policy(GTK_WINDOW(tmp), FALSE, FALSE, TRUE); | |
1015 | |
1016 gtk_widget_realize(tmp); | |
1017 | |
1018 if(flStyle & DW_FCF_TITLEBAR) | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1019 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1020 cy += DEFAULT_TITLEBAR_HEIGHT; |
3 | 1021 flags |= GDK_DECOR_TITLE; |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1022 } |
3 | 1023 |
1024 if(flStyle & DW_FCF_MINMAX) | |
1025 flags |= GDK_DECOR_MINIMIZE | GDK_DECOR_MAXIMIZE; | |
1026 | |
1027 if(flStyle & DW_FCF_SIZEBORDER) | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1028 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1029 cy += DEFAULT_SIZE_HEIGHT; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1030 cx += DEFAULT_SIZE_WIDTH; |
3 | 1031 flags |= GDK_DECOR_RESIZEH; |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1032 } |
3 | 1033 |
1034 if(flStyle & DW_FCF_BORDER) | |
1035 flags |= GDK_DECOR_BORDER; | |
1036 | |
1037 gdk_window_set_decorations(tmp->window, flags); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1038 gtk_object_set_data(GTK_OBJECT(tmp), "cx", (gpointer)cx); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1039 gtk_object_set_data(GTK_OBJECT(tmp), "cy", (gpointer)cy); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1040 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1041 if(hwndOwner) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1042 gdk_window_reparent(GTK_WIDGET(tmp)->window, GTK_WIDGET(hwndOwner)->window, 0, 0); |
3 | 1043 |
1044 DW_MUTEX_UNLOCK; | |
1045 return tmp; | |
1046 } | |
1047 | |
1048 /* | |
1049 * Create a new Box to be packed. | |
1050 * Parameters: | |
1051 * type: Either BOXVERT (vertical) or BOXHORZ (horizontal). | |
1052 * pad: Number of pixels to pad around the box. | |
1053 */ | |
1054 HWND dw_box_new(int type, int pad) | |
1055 { | |
1056 GtkWidget *tmp; | |
1057 int _locked_by_me = FALSE; | |
1058 | |
1059 DW_MUTEX_LOCK; | |
1060 if(type == BOXVERT) | |
1061 tmp = gtk_vbox_new(FALSE, pad); | |
1062 else | |
1063 tmp = gtk_hbox_new(FALSE, pad); | |
1064 gtk_widget_show(tmp); | |
1065 DW_MUTEX_UNLOCK; | |
1066 return tmp; | |
1067 } | |
1068 | |
1069 /* | |
1070 * Create a new Group Box to be packed. | |
1071 * Parameters: | |
1072 * type: Either BOXVERT (vertical) or BOXHORZ (horizontal). | |
1073 * pad: Number of pixels to pad around the box. | |
1074 * title: Text to be displayined in the group outline. | |
1075 */ | |
1076 HWND dw_groupbox_new(int type, int pad, char *title) | |
1077 { | |
1078 return dw_box_new(type, pad); | |
1079 } | |
1080 | |
1081 /* | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1082 * Create a new MDI Frame to be packed. |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1083 * Parameters: |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1084 * id: An ID to be used with dw_window_from_id or 0L. |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1085 */ |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1086 HWND dw_mdi_new(unsigned long id) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1087 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1088 return gtk_vbox_new(FALSE, 0); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1089 } |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1090 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1091 /* |
3 | 1092 * Create a bitmap object to be packed. |
1093 * Parameters: | |
1094 * id: An ID to be used with WinWindowFromID() or 0L. | |
1095 */ | |
1096 HWND dw_bitmap_new(unsigned long id) | |
1097 { | |
1098 GdkPixmap *pixmap= NULL; | |
1099 GdkBitmap *bitmap; | |
1100 GtkWidget *tmp; | |
1101 char * test_xpm[] = { | |
1102 "1 1 1 1", | |
1103 " c None", | |
1104 " "}; | |
1105 int _locked_by_me = FALSE; | |
1106 | |
1107 DW_MUTEX_LOCK; | |
1108 #ifndef USE_IMLIB | |
1109 GtkStyle *iconstyle; | |
1110 | |
1111 /* hmmm why do we need the handle here? */ | |
1112 iconstyle = gtk_widget_get_style(handle); | |
1113 if (!pixmap) | |
1114 pixmap = gdk_pixmap_create_from_xpm_d(handle->window, &bitmap, &iconstyle->bg[GTK_STATE_NORMAL], &test_xpm); | |
1115 #else | |
1116 gdk_imlib_data_to_pixmap(test_xpm, &pixmap, &bitmap); | |
1117 #endif | |
1118 tmp = gtk_pixmap_new(pixmap, bitmap); | |
1119 gtk_widget_show(tmp); | |
1120 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1121 DW_MUTEX_UNLOCK; | |
1122 return tmp; | |
1123 } | |
1124 | |
1125 /* | |
1126 * Create a notebook object to be packed. | |
1127 * Parameters: | |
1128 * id: An ID to be used for getting the resource from the | |
1129 * resource file. | |
1130 */ | |
1131 HWND dw_notebook_new(unsigned long id, int top) | |
1132 { | |
1133 GtkWidget *tmp; | |
1134 int _locked_by_me = FALSE; | |
1135 | |
1136 DW_MUTEX_LOCK; | |
1137 tmp = gtk_notebook_new(); | |
1138 if(top) | |
1139 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tmp), GTK_POS_TOP); | |
1140 else | |
1141 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(tmp), GTK_POS_BOTTOM); | |
1142 gtk_widget_show(tmp); | |
1143 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1144 DW_MUTEX_UNLOCK; | |
1145 return tmp; | |
1146 } | |
1147 | |
1148 /* | |
1149 * Create a menu object to be popped up. | |
1150 * Parameters: | |
1151 * id: An ID to be used for getting the resource from the | |
1152 * resource file. | |
1153 */ | |
1154 HMENUI dw_menu_new(unsigned long id) | |
1155 { | |
1156 int _locked_by_me = FALSE; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1157 HMENUI tmp = malloc(sizeof(struct _hmenui)); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1158 GtkAccelGroup *accel_group; |
3 | 1159 |
1160 if(!tmp) | |
1161 return NULL; | |
1162 | |
1163 DW_MUTEX_LOCK; | |
1164 tmp->menu = gtk_menu_new(); | |
1165 gtk_widget_show(tmp->menu); | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1166 accel_group = gtk_accel_group_new(); |
3 | 1167 gtk_object_set_data(GTK_OBJECT(tmp->menu), "id", (gpointer)id); |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1168 gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group); |
3 | 1169 DW_MUTEX_UNLOCK; |
1170 return tmp; | |
1171 } | |
1172 | |
1173 /* | |
1174 * Create a menubar on a window. | |
1175 * Parameters: | |
1176 * location: Handle of a window frame to be attached to. | |
1177 */ | |
1178 HMENUI dw_menubar_new(HWND location) | |
1179 { | |
1180 GtkWidget *box; | |
1181 int _locked_by_me = FALSE; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1182 HMENUI tmp = malloc(sizeof(struct _hmenui)); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1183 GtkAccelGroup *accel_group; |
3 | 1184 |
1185 if(!tmp) | |
1186 return NULL; | |
1187 | |
1188 DW_MUTEX_LOCK; | |
1189 tmp->menu = gtk_menu_bar_new(); | |
1190 box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location)); | |
1191 gtk_widget_show(tmp->menu); | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1192 accel_group = gtk_accel_group_new(); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1193 gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group); |
3 | 1194 |
1195 if(box) | |
1196 gtk_box_pack_end(GTK_BOX(box), tmp->menu, FALSE, FALSE, 0); | |
1197 | |
1198 DW_MUTEX_UNLOCK; | |
1199 return tmp; | |
1200 } | |
1201 | |
1202 /* | |
1203 * Destroys a menu created with dw_menubar_new or dw_menu_new. | |
1204 * Parameters: | |
1205 * menu: Handle of a menu. | |
1206 */ | |
1207 void dw_menu_destroy(HMENUI *menu) | |
1208 { | |
1209 if(menu && *menu) | |
1210 { | |
1211 int _locked_by_me = FALSE; | |
1212 | |
1213 DW_MUTEX_LOCK; | |
1214 gtk_widget_destroy((*menu)->menu); | |
1215 free(*menu); | |
1216 *menu = NULL; | |
1217 DW_MUTEX_UNLOCK; | |
1218 } | |
1219 } | |
1220 | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1221 char _removetilde(char *dest, char *src) |
3 | 1222 { |
1223 int z, cur=0; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1224 char accel = '\0'; |
3 | 1225 |
1226 for(z=0;z<strlen(src);z++) | |
1227 { | |
1228 if(src[z] != '~') | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1229 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1230 dest[cur] = src[z]; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1231 cur++; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1232 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1233 else |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1234 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1235 dest[cur] = '_'; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1236 accel = src[z+1]; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1237 cur++; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1238 } |
3 | 1239 } |
1240 dest[cur] = 0; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1241 return accel; |
3 | 1242 } |
1243 | |
1244 /* | |
1245 * Adds a menuitem or submenu to an existing menu. | |
1246 * Parameters: | |
1247 * menu: The handle the the existing menu. | |
1248 * title: The title text on the menu item to be added. | |
1249 * id: An ID to be used for message passing. | |
1250 * flags: Extended attributes to set on the menu. | |
1251 * end: If TRUE memu is positioned at the end of the menu. | |
1252 * check: If TRUE menu is "check"able. | |
1253 * submenu: Handle to an existing menu to be a submenu or NULL. | |
1254 */ | |
1255 HWND dw_menu_append_item(HMENUI menu, char *title, unsigned long id, unsigned long flags, int end, int check, HMENUI submenu) | |
1256 { | |
1257 GtkWidget *tmphandle; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1258 char accel, *tempbuf = malloc(strlen(title)+1); |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1259 int _locked_by_me = FALSE, submenucount; |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1260 guint tmp_key; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1261 GtkAccelGroup *accel_group; |
3 | 1262 |
1263 if(!menu || !menu->menu) | |
1264 { | |
1265 free(tempbuf); | |
1266 return NULL; | |
1267 } | |
1268 | |
1269 DW_MUTEX_LOCK; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1270 accel = _removetilde(tempbuf, title); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1271 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1272 accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu->menu), "accel"); |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1273 submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu->menu), "submenucount"); |
3 | 1274 |
1275 if(strlen(tempbuf) == 0) | |
1276 tmphandle=gtk_menu_item_new(); | |
1277 else | |
1278 { | |
1279 if(check) | |
1280 { | |
1281 char numbuf[10]; | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1282 if(accel && accel_group) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1283 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1284 tmphandle=gtk_check_menu_item_new_with_label(""); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1285 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1286 gtk_widget_add_accelerator(tmphandle, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1287 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1288 else |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1289 tmphandle=gtk_check_menu_item_new_with_label(tempbuf); |
3 | 1290 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); |
1291 sprintf(numbuf, "%lu", id); | |
1292 gtk_object_set_data(GTK_OBJECT(menu->menu), numbuf, (gpointer)tmphandle); | |
1293 } | |
1294 else | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1295 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1296 if(accel && accel_group) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1297 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1298 tmphandle=gtk_menu_item_new_with_label(""); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1299 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1300 gtk_widget_add_accelerator(tmphandle, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1301 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1302 else |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1303 tmphandle=gtk_menu_item_new_with_label(tempbuf); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1304 } |
3 | 1305 } |
1306 | |
1307 gtk_widget_show(tmphandle); | |
1308 | |
1309 if(submenu) | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1310 { |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1311 char tempbuf[100]; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1312 |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1313 sprintf(tempbuf, "submenu%d", submenucount); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1314 submenucount++; |
3 | 1315 gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu->menu); |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1316 gtk_object_set_data(GTK_OBJECT(menu->menu), tempbuf, (gpointer)submenu->menu); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1317 gtk_object_set_data(GTK_OBJECT(menu->menu), "submenucount", (gpointer)submenucount); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1318 } |
3 | 1319 |
1320 if(GTK_IS_MENU_BAR(menu->menu)) | |
1321 gtk_menu_bar_append(GTK_MENU_BAR(menu->menu), tmphandle); | |
1322 else | |
1323 gtk_menu_append(GTK_MENU(menu->menu), tmphandle); | |
1324 | |
1325 gtk_object_set_data(GTK_OBJECT(tmphandle), "id", (gpointer)id); | |
1326 free(tempbuf); | |
1327 DW_MUTEX_UNLOCK; | |
1328 return tmphandle; | |
1329 } | |
1330 | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1331 GtkWidget *_find_submenu_id(GtkWidget *start, char *name) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1332 { |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1333 GtkWidget *tmp; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1334 int z, submenucount = (int)gtk_object_get_data(GTK_OBJECT(start), "submenucount"); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1335 |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1336 if((tmp = gtk_object_get_data(GTK_OBJECT(start), name))) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1337 return tmp; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1338 |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1339 for(z=0;z<submenucount;z++) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1340 { |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1341 char tempbuf[100]; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1342 GtkWidget *submenu, *menuitem; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1343 |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1344 sprintf(tempbuf, "submenu%d", z); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1345 |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1346 if((submenu = gtk_object_get_data(GTK_OBJECT(start), tempbuf))) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1347 { |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1348 if((menuitem = _find_submenu_id(submenu, name))) |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1349 return menuitem; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1350 } |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1351 } |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1352 return NULL; |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1353 } |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1354 |
3 | 1355 /* |
1356 * Sets the state of a menu item check. | |
1357 * Parameters: | |
1358 * menu: The handle the the existing menu. | |
1359 * id: Menuitem id. | |
1360 * check: TRUE for checked FALSE for not checked. | |
1361 */ | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1362 void dw_menu_item_set_check(HMENUI menu, unsigned long id, int check) |
3 | 1363 { |
1364 char numbuf[10]; | |
1365 GtkWidget *tmphandle; | |
1366 int _locked_by_me = FALSE; | |
1367 | |
1368 if(!menu || !menu->menu) | |
1369 return; | |
1370 | |
1371 DW_MUTEX_LOCK; | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1372 sprintf(numbuf, "%lu", id); |
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
1373 tmphandle = _find_submenu_id(menu->menu, numbuf); |
3 | 1374 |
1375 if(tmphandle) | |
1376 { | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1377 _dw_ignore_click = 1; |
3 | 1378 if(GTK_CHECK_MENU_ITEM(tmphandle)->active != check) |
1379 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(tmphandle), check); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1380 _dw_ignore_click = 0; |
3 | 1381 } |
1382 DW_MUTEX_UNLOCK; | |
1383 } | |
1384 | |
1385 /* | |
1386 * Pops up a context menu at given x and y coordinates. | |
1387 * Parameters: | |
1388 * menu: The handle the the existing menu. | |
1389 * parent: Handle to the window initiating the popup. | |
1390 * x: X coordinate. | |
1391 * y: Y coordinate. | |
1392 */ | |
1393 void dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) | |
1394 { | |
1395 int _locked_by_me = FALSE; | |
1396 | |
1397 if(!menu || !*menu) | |
1398 return; | |
1399 | |
1400 DW_MUTEX_LOCK; | |
1401 gtk_menu_popup(GTK_MENU((*menu)->menu), NULL, NULL, NULL, NULL, x, y); | |
1402 free(*menu); | |
1403 *menu = NULL; | |
1404 DW_MUTEX_UNLOCK; | |
1405 } | |
1406 | |
1407 | |
1408 /* | |
1409 * Returns the current X and Y coordinates of the mouse pointer. | |
1410 * Parameters: | |
1411 * x: Pointer to variable to store X coordinate. | |
1412 * y: Pointer to variable to store Y coordinate. | |
1413 */ | |
1414 void dw_pointer_query_pos(long *x, long *y) | |
1415 { | |
1416 GdkModifierType state; | |
1417 int gx, gy; | |
1418 | |
1419 gdk_window_get_pointer (GDK_ROOT_PARENT(), &gx, &gy, &state); | |
1420 *x = gx; | |
1421 *y = gy; | |
1422 } | |
1423 | |
1424 /* | |
1425 * Sets the X and Y coordinates of the mouse pointer. | |
1426 * Parameters: | |
1427 * x: X coordinate. | |
1428 * y: Y coordinate. | |
1429 */ | |
1430 void dw_pointer_set_pos(long x, long y) | |
1431 { | |
1432 XWarpPointer(GDK_DISPLAY(), None, GDK_ROOT_WINDOW(), 0,0,0,0, x, y); | |
1433 } | |
1434 | |
1435 /* | |
1436 * Create a container object to be packed. | |
1437 * Parameters: | |
1438 * id: An ID to be used for getting the resource from the | |
1439 * resource file. | |
1440 */ | |
1441 HWND dw_container_new(unsigned long id) | |
1442 { | |
1443 GtkWidget *tmp; | |
1444 int _locked_by_me = FALSE; | |
1445 | |
1446 DW_MUTEX_LOCK; | |
1447 tmp = gtk_scrolled_window_new (NULL, NULL); | |
1448 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (tmp), | |
1449 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | |
1450 | |
1451 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1452 gtk_widget_show(tmp); | |
1453 | |
1454 DW_MUTEX_UNLOCK; | |
1455 return tmp; | |
1456 } | |
1457 | |
1458 /* | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1459 * Create a tree object to be packed. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1460 * Parameters: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1461 * id: An ID to be used for getting the resource from the |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1462 * resource file. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1463 */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1464 HWND dw_tree_new(ULONG id) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1465 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1466 GtkWidget *tmp, *tree; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1467 int _locked_by_me = FALSE; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1468 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1469 DW_MUTEX_LOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1470 tmp = gtk_scrolled_window_new(NULL, NULL); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1471 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1472 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1473 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1474 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1475 gtk_widget_show(tmp); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1476 tree = gtk_tree_new(); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1477 if(!tree) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1478 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1479 gtk_widget_destroy(tmp); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1480 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1481 return FALSE; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1482 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1483 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1484 /* Set the selection mode */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1485 gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1486 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1487 gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1488 gtk_widget_show(tree); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1489 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1490 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1491 return tmp; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1492 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1493 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1494 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
1495 /* |
3 | 1496 * Create a new static text window (widget) to be packed. |
1497 * Parameters: | |
1498 * text: The text to be display by the static text widget. | |
1499 * id: An ID to be used with WinWindowFromID() or 0L. | |
1500 */ | |
1501 HWND dw_text_new(char *text, unsigned long id) | |
1502 { | |
1503 GtkWidget *tmp; | |
1504 int _locked_by_me = FALSE; | |
1505 | |
1506 DW_MUTEX_LOCK; | |
1507 tmp = gtk_label_new(text); | |
1508 gtk_label_set_justify(GTK_LABEL(tmp), GTK_JUSTIFY_LEFT); | |
1509 gtk_widget_show(tmp); | |
1510 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1511 DW_MUTEX_UNLOCK; | |
1512 return tmp; | |
1513 } | |
1514 | |
1515 /* | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1516 * Create a new status text window (widget) to be packed. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1517 * Parameters: |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1518 * text: The text to be display by the static text widget. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1519 * id: An ID to be used with WinWindowFromID() or 0L. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1520 */ |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1521 HWND dw_status_text_new(char *text, ULONG id) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1522 { |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1523 GtkWidget *tmp, *frame; |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1524 int _locked_by_me = FALSE; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1525 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1526 DW_MUTEX_LOCK; |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1527 frame = gtk_frame_new(NULL); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1528 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1529 tmp = gtk_label_new(text); |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1530 gtk_container_add(GTK_CONTAINER(frame), tmp); |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1531 gtk_widget_show(tmp); |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1532 gtk_widget_show(frame); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1533 gtk_label_set_justify(GTK_LABEL(tmp), GTK_JUSTIFY_LEFT); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1534 gtk_object_set_data(GTK_OBJECT(frame), "id", (gpointer)id); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1535 gtk_object_set_data(GTK_OBJECT(frame), "label", (gpointer)tmp); |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1536 DW_MUTEX_UNLOCK; |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1537 return frame; |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1538 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1539 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
1540 /* |
3 | 1541 * Create a new Multiline Editbox window (widget) to be packed. |
1542 * Parameters: | |
1543 * id: An ID to be used with WinWindowFromID() or 0L. | |
1544 */ | |
1545 HWND dw_mle_new(unsigned long id) | |
1546 { | |
1547 GtkWidget *tmp, *tmpbox, *scroller; | |
1548 int _locked_by_me = FALSE; | |
1549 | |
1550 DW_MUTEX_LOCK; | |
1551 tmpbox = gtk_hbox_new(FALSE, 0); | |
1552 tmp = gtk_text_new(NULL, NULL); | |
1553 gtk_text_set_word_wrap(GTK_TEXT(tmp), FALSE); | |
1554 gtk_text_set_line_wrap(GTK_TEXT(tmp), FALSE); | |
1555 scroller = gtk_vscrollbar_new(GTK_TEXT(tmp)->vadj); | |
1556 GTK_WIDGET_UNSET_FLAGS(scroller, GTK_CAN_FOCUS); | |
1557 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1558 gtk_object_set_data(GTK_OBJECT(tmpbox), "mle", (gpointer)tmp); | |
1559 gtk_box_pack_start(GTK_BOX(tmpbox), tmp, TRUE, TRUE, 0); | |
1560 gtk_box_pack_start(GTK_BOX(tmpbox), scroller, FALSE, TRUE, 0); | |
1561 gtk_widget_show(tmp); | |
1562 gtk_widget_show(scroller); | |
1563 gtk_widget_show(tmpbox); | |
1564 DW_MUTEX_UNLOCK; | |
1565 return tmpbox; | |
1566 } | |
1567 | |
1568 /* | |
1569 * Create a new Entryfield window (widget) to be packed. | |
1570 * Parameters: | |
1571 * text: The default text to be in the entryfield widget. | |
1572 * id: An ID to be used with WinWindowFromID() or 0L. | |
1573 */ | |
1574 HWND dw_entryfield_new(char *text, unsigned long id) | |
1575 { | |
1576 GtkWidget *tmp; | |
1577 int _locked_by_me = FALSE; | |
1578 | |
1579 DW_MUTEX_LOCK; | |
1580 tmp = gtk_entry_new(); | |
1581 | |
1582 gtk_entry_set_text(GTK_ENTRY(tmp), text); | |
1583 | |
1584 gtk_widget_show(tmp); | |
1585 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1586 | |
1587 DW_MUTEX_UNLOCK; | |
1588 return tmp; | |
1589 } | |
1590 | |
1591 /* | |
1592 * Create a new Entryfield (password) window (widget) to be packed. | |
1593 * Parameters: | |
1594 * text: The default text to be in the entryfield widget. | |
1595 * id: An ID to be used with WinWindowFromID() or 0L. | |
1596 */ | |
1597 HWND dw_entryfield_password_new(char *text, ULONG id) | |
1598 { | |
1599 GtkWidget *tmp; | |
1600 int _locked_by_me = FALSE; | |
1601 | |
1602 DW_MUTEX_LOCK; | |
1603 tmp = gtk_entry_new(); | |
1604 | |
1605 gtk_entry_set_visibility(GTK_ENTRY(tmp), FALSE); | |
1606 gtk_entry_set_text(GTK_ENTRY(tmp), text); | |
1607 | |
1608 gtk_widget_show(tmp); | |
1609 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1610 | |
1611 DW_MUTEX_UNLOCK; | |
1612 return tmp; | |
1613 } | |
1614 | |
1615 /* | |
1616 * Create a new Combobox window (widget) to be packed. | |
1617 * Parameters: | |
1618 * text: The default text to be in the combpbox widget. | |
1619 * id: An ID to be used with WinWindowFromID() or 0L. | |
1620 */ | |
1621 HWND dw_combobox_new(char *text, unsigned long id) | |
1622 { | |
1623 GtkWidget *tmp; | |
1624 int _locked_by_me = FALSE; | |
1625 | |
1626 DW_MUTEX_LOCK; | |
1627 tmp = gtk_combo_new(); | |
1628 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(tmp)->entry), text); | |
1629 gtk_combo_set_use_arrows(GTK_COMBO(tmp), TRUE); | |
1630 gtk_object_set_user_data(GTK_OBJECT(tmp), NULL); | |
1631 gtk_widget_show(tmp); | |
1632 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1633 DW_MUTEX_UNLOCK; | |
1634 return tmp; | |
1635 } | |
1636 | |
1637 /* | |
1638 * Create a new button window (widget) to be packed. | |
1639 * Parameters: | |
1640 * text: The text to be display by the static text widget. | |
1641 * id: An ID to be used with WinWindowFromID() or 0L. | |
1642 */ | |
1643 HWND dw_button_new(char *text, unsigned long id) | |
1644 { | |
1645 GtkWidget *tmp; | |
1646 int _locked_by_me = FALSE; | |
1647 | |
1648 DW_MUTEX_LOCK; | |
1649 tmp = gtk_button_new_with_label(text); | |
1650 gtk_widget_show(tmp); | |
1651 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1652 DW_MUTEX_UNLOCK; | |
1653 return tmp; | |
1654 } | |
1655 | |
1656 /* | |
1657 * Create a new bitmap button window (widget) to be packed. | |
1658 * Parameters: | |
1659 * text: Bubble help text to be displayed. | |
1660 * id: An ID of a bitmap in the resource file. | |
1661 */ | |
1662 HWND dw_bitmapbutton_new(char *text, unsigned long id) | |
1663 { | |
1664 GtkWidget *tmp; | |
1665 GtkWidget *bitmap; | |
1666 GtkTooltips *tooltips; | |
1667 int _locked_by_me = FALSE; | |
1668 | |
1669 DW_MUTEX_LOCK; | |
1670 tmp = gtk_button_new(); | |
1671 bitmap = dw_bitmap_new(id); | |
1672 | |
1673 if(bitmap) | |
1674 { | |
1675 dw_window_set_bitmap(bitmap, id); | |
1676 gtk_container_add (GTK_CONTAINER(tmp), bitmap); | |
1677 } | |
1678 gtk_widget_show(tmp); | |
1679 if(text) | |
1680 { | |
1681 tooltips = gtk_tooltips_new(); | |
1682 gtk_tooltips_set_colors(tooltips, &_colors[DW_CLR_BLACK], &_colors[DW_CLR_YELLOW]); | |
1683 gtk_tooltips_set_tip(tooltips, tmp, text, NULL); | |
1684 gtk_object_set_data(GTK_OBJECT(tmp), "tooltip", (gpointer)tooltips); | |
1685 } | |
1686 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1687 DW_MUTEX_UNLOCK; | |
1688 return tmp; | |
1689 } | |
1690 | |
1691 /* | |
1692 * Create a new spinbutton window (widget) to be packed. | |
1693 * Parameters: | |
1694 * text: The text to be display by the static text widget. | |
1695 * id: An ID to be used with WinWindowFromID() or 0L. | |
1696 */ | |
1697 HWND dw_spinbutton_new(char *text, unsigned long id) | |
1698 { | |
1699 GtkAdjustment *adj; | |
1700 GtkWidget *tmp; | |
1701 int _locked_by_me = FALSE; | |
1702 | |
1703 DW_MUTEX_LOCK; | |
1704 adj = (GtkAdjustment *)gtk_adjustment_new (1.0, 0.0, 100.0, 1.0, 5.0, 0.0); | |
1705 tmp = gtk_spin_button_new (adj, 0, 0); | |
1706 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(tmp), TRUE); | |
1707 gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(tmp), TRUE); | |
1708 gtk_widget_show(tmp); | |
1709 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1710 DW_MUTEX_UNLOCK; | |
1711 return tmp; | |
1712 } | |
1713 | |
1714 /* | |
1715 * Create a new radiobutton window (widget) to be packed. | |
1716 * Parameters: | |
1717 * text: The text to be display by the static text widget. | |
1718 * id: An ID to be used with WinWindowFromID() or 0L. | |
1719 */ | |
1720 HWND dw_radiobutton_new(char *text, ULONG id) | |
1721 { | |
1722 /* This will have to be fixed in the future. */ | |
1723 GtkWidget *tmp; | |
1724 int _locked_by_me = FALSE; | |
1725 | |
1726 DW_MUTEX_LOCK; | |
1727 tmp = gtk_radio_button_new_with_label(NULL, text); | |
1728 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1729 gtk_widget_show(tmp); | |
1730 | |
1731 DW_MUTEX_UNLOCK; | |
1732 return tmp; | |
1733 } | |
1734 | |
1735 /* | |
1736 * Create a new slider window (widget) to be packed. | |
1737 * Parameters: | |
1738 * id: An ID to be used with WinWindowFromID() or 0L. | |
1739 */ | |
1740 HWND dw_slider_new(unsigned long id) | |
1741 { | |
1742 GtkWidget *tmp; | |
1743 int _locked_by_me = FALSE; | |
1744 | |
1745 DW_MUTEX_LOCK; | |
1746 tmp = gtk_progress_bar_new(); | |
1747 gtk_widget_show(tmp); | |
1748 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1749 DW_MUTEX_UNLOCK; | |
1750 return tmp; | |
1751 } | |
1752 | |
1753 /* | |
1754 * Create a new checkbox window (widget) to be packed. | |
1755 * Parameters: | |
1756 * text: The text to be display by the static text widget. | |
1757 * id: An ID to be used with WinWindowFromID() or 0L. | |
1758 */ | |
1759 HWND dw_checkbox_new(char *text, unsigned long id) | |
1760 { | |
1761 GtkWidget *tmp; | |
1762 int _locked_by_me = FALSE; | |
1763 | |
1764 DW_MUTEX_LOCK; | |
1765 tmp = gtk_check_button_new_with_label(text); | |
1766 gtk_widget_show(tmp); | |
1767 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1768 DW_MUTEX_UNLOCK; | |
1769 return tmp; | |
1770 } | |
1771 | |
1772 /* | |
1773 * Create a new listbox window (widget) to be packed. | |
1774 * Parameters: | |
1775 * id: An ID to be used with WinWindowFromID() or 0L. | |
1776 * multi: Multiple select TRUE or FALSE. | |
1777 */ | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1778 HWND dw_listbox_new(unsigned long id, int multi) |
3 | 1779 { |
1780 GtkWidget *tmp, *list; | |
1781 int _locked_by_me = FALSE; | |
1782 | |
1783 DW_MUTEX_LOCK; | |
1784 tmp = gtk_scrolled_window_new(NULL, NULL); | |
1785 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), | |
1786 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | |
1787 | |
1788 list = gtk_list_new(); | |
1789 gtk_list_set_selection_mode(GTK_LIST(list), multi ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); | |
1790 | |
1791 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), | |
1792 list); | |
1793 gtk_object_set_user_data(GTK_OBJECT(tmp), list); | |
1794 gtk_widget_show(list); | |
1795 gtk_widget_show(tmp); | |
1796 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
1797 | |
1798 DW_MUTEX_UNLOCK; | |
1799 return tmp; | |
1800 } | |
1801 | |
1802 /* | |
1803 * Sets the icon used for a given window. | |
1804 * Parameters: | |
1805 * handle: Handle to the window. | |
1806 * id: An ID to be used to specify the icon. | |
1807 */ | |
1808 void dw_window_set_icon(HWND handle, unsigned long id) | |
1809 { | |
1810 GdkBitmap *bitmap; | |
1811 GdkPixmap *icon_pixmap; | |
1812 int _locked_by_me = FALSE; | |
1813 | |
1814 DW_MUTEX_LOCK; | |
1815 icon_pixmap = _find_pixmap(&bitmap, id, handle); | |
1816 | |
1817 if(handle->window && icon_pixmap) | |
1818 gdk_window_set_icon(handle->window, NULL, icon_pixmap, bitmap); | |
1819 | |
1820 DW_MUTEX_UNLOCK; | |
1821 } | |
1822 | |
1823 /* | |
1824 * Sets the bitmap used for a given static window. | |
1825 * Parameters: | |
1826 * handle: Handle to the window. | |
1827 * id: An ID to be used to specify the icon. | |
1828 */ | |
1829 void dw_window_set_bitmap(HWND handle, unsigned long id) | |
1830 { | |
1831 GdkBitmap *bitmap; | |
1832 GdkPixmap *tmp; | |
1833 int _locked_by_me = FALSE; | |
1834 | |
1835 DW_MUTEX_LOCK; | |
1836 tmp = _find_pixmap(&bitmap, id, handle); | |
1837 if(tmp) | |
1838 gtk_pixmap_set(GTK_PIXMAP(handle), tmp, bitmap); | |
1839 DW_MUTEX_UNLOCK; | |
1840 } | |
1841 | |
1842 /* | |
1843 * Sets the text used for a given window. | |
1844 * Parameters: | |
1845 * handle: Handle to the window. | |
1846 * text: The text associsated with a given window. | |
1847 */ | |
1848 void dw_window_set_text(HWND handle, char *text) | |
1849 { | |
1850 int _locked_by_me = FALSE; | |
1851 | |
1852 DW_MUTEX_LOCK; | |
1853 if(GTK_IS_ENTRY(handle)) | |
1854 gtk_entry_set_text(GTK_ENTRY(handle), text); | |
1855 else if(GTK_IS_COMBO(handle)) | |
1856 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(handle)->entry), text); | |
1857 else if(GTK_IS_LABEL(handle)) | |
1858 gtk_label_set_text(GTK_LABEL(handle), text); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1859 else if(GTK_IS_FRAME(handle)) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1860 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1861 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "label"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1862 if(tmp && GTK_IS_LABEL(tmp)) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1863 gtk_label_set_text(GTK_LABEL(tmp), text); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
1864 } |
3 | 1865 DW_MUTEX_UNLOCK; |
1866 } | |
1867 | |
1868 /* | |
1869 * Gets the text used for a given window. | |
1870 * Parameters: | |
1871 * handle: Handle to the window. | |
1872 * Returns: | |
1873 * text: The text associsated with a given window. | |
1874 */ | |
1875 char *dw_window_get_text(HWND handle) | |
1876 { | |
1877 char *possible = ""; | |
1878 int _locked_by_me = FALSE; | |
1879 | |
1880 DW_MUTEX_LOCK; | |
1881 if(GTK_IS_ENTRY(handle)) | |
1882 possible = gtk_entry_get_text(GTK_ENTRY(handle)); | |
1883 else if(GTK_IS_COMBO(handle)) | |
1884 possible = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(handle)->entry)); | |
1885 | |
1886 DW_MUTEX_UNLOCK; | |
1887 return strdup(possible); | |
1888 } | |
1889 | |
1890 /* | |
1891 * Disables given window (widget). | |
1892 * Parameters: | |
1893 * handle: Handle to the window. | |
1894 */ | |
1895 void dw_window_disable(HWND handle) | |
1896 { | |
1897 int _locked_by_me = FALSE; | |
1898 | |
1899 DW_MUTEX_LOCK; | |
1900 gtk_widget_set_sensitive(handle, FALSE); | |
1901 DW_MUTEX_UNLOCK; | |
1902 } | |
1903 | |
1904 /* | |
1905 * Enables given window (widget). | |
1906 * Parameters: | |
1907 * handle: Handle to the window. | |
1908 */ | |
1909 void dw_window_enable(HWND handle) | |
1910 { | |
1911 int _locked_by_me = FALSE; | |
1912 | |
1913 DW_MUTEX_LOCK; | |
1914 gtk_widget_set_sensitive(handle, TRUE); | |
1915 DW_MUTEX_UNLOCK; | |
1916 } | |
1917 | |
1918 /* | |
1919 * Adds text to an MLE box and returns the current point. | |
1920 * Parameters: | |
1921 * handle: Handle to the MLE to be queried. | |
1922 * buffer: Text buffer to be imported. | |
1923 * startpoint: Point to start entering text. | |
1924 */ | |
1925 unsigned int dw_mle_import(HWND handle, char *buffer, int startpoint) | |
1926 { | |
1927 unsigned int tmppoint = startpoint; | |
1928 int _locked_by_me = FALSE; | |
1929 | |
1930 DW_MUTEX_LOCK; | |
1931 if(GTK_IS_BOX(handle)) | |
1932 { | |
1933 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
1934 | |
1935 if(tmp && GTK_IS_TEXT(tmp)) | |
1936 { | |
1937 gtk_text_set_point(GTK_TEXT(tmp), startpoint < 0 ? 0 : startpoint); | |
1938 gtk_text_insert(GTK_TEXT(tmp), NULL, NULL, NULL, buffer, -1); | |
1939 tmppoint = gtk_text_get_point(GTK_TEXT(tmp)); | |
1940 } | |
1941 } | |
1942 DW_MUTEX_UNLOCK; | |
1943 return tmppoint; | |
1944 } | |
1945 | |
1946 /* | |
1947 * Grabs text from an MLE box. | |
1948 * Parameters: | |
1949 * handle: Handle to the MLE to be queried. | |
1950 * buffer: Text buffer to be exported. | |
1951 * startpoint: Point to start grabbing text. | |
1952 * length: Amount of text to be grabbed. | |
1953 */ | |
1954 void dw_mle_export(HWND handle, char *buffer, int startpoint, int length) | |
1955 { | |
1956 int _locked_by_me = FALSE; | |
1957 gchar *text; | |
1958 | |
1959 DW_MUTEX_LOCK; | |
1960 if(GTK_IS_BOX(handle)) | |
1961 { | |
1962 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
1963 | |
1964 if(tmp && GTK_IS_TEXT(tmp)) | |
1965 { | |
1966 text = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), startpoint, startpoint + length); | |
1967 if(text) | |
1968 { | |
1969 strcpy(buffer, text); | |
1970 g_free(text); | |
1971 } | |
1972 } | |
1973 } | |
1974 DW_MUTEX_UNLOCK; | |
1975 } | |
1976 | |
1977 /* | |
1978 * Obtains information about an MLE box. | |
1979 * Parameters: | |
1980 * handle: Handle to the MLE to be queried. | |
1981 * bytes: A pointer to a variable to return the total bytes. | |
1982 * lines: A pointer to a variable to return the number of lines. | |
1983 */ | |
1984 void dw_mle_query(HWND handle, unsigned long *bytes, unsigned long *lines) | |
1985 { | |
1986 int _locked_by_me = FALSE; | |
1987 | |
1988 if(bytes) | |
1989 *bytes = 0; | |
1990 if(lines) | |
1991 *lines = 0; | |
1992 | |
1993 DW_MUTEX_LOCK; | |
1994 if(GTK_IS_BOX(handle)) | |
1995 { | |
1996 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
1997 | |
1998 if(tmp && GTK_IS_TEXT(tmp)) | |
1999 { | |
2000 if(bytes) | |
2001 *bytes = gtk_text_get_length(GTK_TEXT(tmp)); | |
2002 if(lines) | |
2003 { | |
2004 gchar *text; | |
2005 | |
2006 *lines = 0; | |
2007 text = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, bytes ? *bytes : gtk_text_get_length(GTK_TEXT(tmp))); | |
2008 | |
2009 if(text) | |
2010 { | |
2011 int z, len = strlen(text); | |
2012 | |
2013 for(z=0;z<len;z++) | |
2014 { | |
2015 if(text[z] == '\n') | |
2016 (*lines)++; | |
2017 } | |
2018 g_free(text); | |
2019 } | |
2020 } | |
2021 } | |
2022 } | |
2023 DW_MUTEX_UNLOCK; | |
2024 } | |
2025 | |
2026 /* | |
2027 * Deletes text from an MLE box. | |
2028 * Parameters: | |
2029 * handle: Handle to the MLE to be deleted from. | |
2030 * startpoint: Point to start deleting text. | |
2031 * length: Amount of text to be deleted. | |
2032 */ | |
2033 void dw_mle_delete(HWND handle, int startpoint, int length) | |
2034 { | |
2035 int _locked_by_me = FALSE; | |
2036 | |
2037 DW_MUTEX_LOCK; | |
2038 if(GTK_IS_BOX(handle)) | |
2039 { | |
2040 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2041 | |
2042 if(tmp && GTK_IS_TEXT(tmp)) | |
2043 { | |
2044 gtk_text_set_point(GTK_TEXT(tmp), startpoint); | |
2045 gtk_text_forward_delete(GTK_TEXT(tmp), length); | |
2046 } | |
2047 } | |
2048 DW_MUTEX_UNLOCK; | |
2049 } | |
2050 | |
2051 /* | |
2052 * Clears all text from an MLE box. | |
2053 * Parameters: | |
2054 * handle: Handle to the MLE to be cleared. | |
2055 */ | |
2056 void dw_mle_clear(HWND handle) | |
2057 { | |
2058 int length, _locked_by_me = FALSE; | |
2059 | |
2060 DW_MUTEX_LOCK; | |
2061 if(GTK_IS_BOX(handle)) | |
2062 { | |
2063 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2064 | |
2065 if(tmp && GTK_IS_TEXT(tmp)) | |
2066 { | |
2067 length = gtk_text_get_length(GTK_TEXT(tmp)); | |
2068 gtk_text_set_point(GTK_TEXT(tmp), 0); | |
2069 gtk_text_forward_delete(GTK_TEXT(tmp), length); | |
2070 } | |
2071 } | |
2072 DW_MUTEX_UNLOCK; | |
2073 } | |
2074 | |
2075 /* | |
2076 * Sets the visible line of an MLE box. | |
2077 * Parameters: | |
2078 * handle: Handle to the MLE. | |
2079 * line: Line to be visible. | |
2080 */ | |
2081 void dw_mle_set_visible(HWND handle, int line) | |
2082 { | |
2083 int _locked_by_me = FALSE; | |
2084 | |
2085 DW_MUTEX_LOCK; | |
2086 if(GTK_IS_BOX(handle)) | |
2087 { | |
2088 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2089 | |
2090 if(tmp && GTK_IS_TEXT(tmp)) | |
2091 { | |
2092 unsigned long lines; | |
2093 float pos, ratio; | |
2094 | |
2095 dw_mle_query(handle, NULL, &lines); | |
2096 | |
2097 if(lines) | |
2098 { | |
2099 ratio = (float)line/(float)lines; | |
2100 | |
2101 pos = (ratio * (float)(GTK_TEXT(tmp)->vadj->upper - GTK_TEXT(tmp)->vadj->lower)) + GTK_TEXT(tmp)->vadj->lower; | |
2102 | |
2103 gtk_adjustment_set_value(GTK_TEXT(tmp)->vadj, pos); | |
2104 } | |
2105 } | |
2106 } | |
2107 DW_MUTEX_UNLOCK; | |
2108 } | |
2109 | |
2110 /* | |
7
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2111 * Sets the editablity of an MLE box. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2112 * Parameters: |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2113 * handle: Handle to the MLE. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2114 * state: TRUE if it can be edited, FALSE for readonly. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2115 */ |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2116 void dw_mle_set_editable(HWND handle, int state) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2117 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2118 int _locked_by_me = FALSE; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2119 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2120 DW_MUTEX_LOCK; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2121 if(GTK_IS_BOX(handle)) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2122 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2123 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2124 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2125 if(tmp && GTK_IS_TEXT(tmp)) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2126 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2127 gtk_text_set_editable(GTK_TEXT(tmp), state); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2128 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2129 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2130 DW_MUTEX_UNLOCK; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2131 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2132 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2133 /* |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2134 * Sets the word wrap state of an MLE box. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2135 * Parameters: |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2136 * handle: Handle to the MLE. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2137 * state: TRUE if it wraps, FALSE if it doesn't. |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2138 */ |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2139 void dw_mle_set_word_wrap(HWND handle, int state) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2140 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2141 int _locked_by_me = FALSE; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2142 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2143 DW_MUTEX_LOCK; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2144 if(GTK_IS_BOX(handle)) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2145 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2146 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2147 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2148 if(tmp && GTK_IS_TEXT(tmp)) |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2149 { |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2150 gtk_text_set_word_wrap(GTK_TEXT(tmp), state); |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2151 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2152 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2153 DW_MUTEX_UNLOCK; |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2154 } |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2155 |
005fa766e8c2
Updates to latest build.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
3
diff
changeset
|
2156 /* |
3 | 2157 * Sets the current cursor position of an MLE box. |
2158 * Parameters: | |
2159 * handle: Handle to the MLE to be positioned. | |
2160 * point: Point to position cursor. | |
2161 */ | |
2162 void dw_mle_set(HWND handle, int point) | |
2163 { | |
2164 int _locked_by_me = FALSE; | |
2165 | |
2166 DW_MUTEX_LOCK; | |
2167 if(GTK_IS_BOX(handle)) | |
2168 { | |
2169 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2170 | |
2171 if(tmp && GTK_IS_TEXT(tmp)) | |
2172 { | |
2173 gtk_text_set_point(GTK_TEXT(tmp), point); | |
2174 } | |
2175 } | |
2176 DW_MUTEX_UNLOCK; | |
2177 } | |
2178 | |
2179 /* | |
2180 * Finds text in an MLE box. | |
2181 * Parameters: | |
2182 * handle: Handle to the MLE to be cleared. | |
2183 * text: Text to search for. | |
2184 * point: Start point of search. | |
2185 * flags: Search specific flags. | |
2186 */ | |
2187 int dw_mle_search(HWND handle, char *text, int point, unsigned long flags) | |
2188 { | |
2189 int _locked_by_me = FALSE, retval = 0; | |
2190 | |
2191 DW_MUTEX_LOCK; | |
2192 if(GTK_IS_BOX(handle)) | |
2193 { | |
2194 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2195 | |
2196 if(tmp && GTK_IS_TEXT(tmp)) | |
2197 { | |
2198 int len = gtk_text_get_length(GTK_TEXT(tmp)); | |
2199 gchar *tmpbuf; | |
2200 | |
2201 tmpbuf = gtk_editable_get_chars(GTK_EDITABLE(&(GTK_TEXT(tmp)->editable)), 0, len); | |
2202 if(tmpbuf) | |
2203 { | |
2204 int z, textlen; | |
2205 | |
2206 textlen = strlen(text); | |
2207 | |
2208 if(flags & DW_MLE_CASESENSITIVE) | |
2209 { | |
2210 for(z=point;z<(len-textlen) && !retval;z++) | |
2211 { | |
2212 if(strncmp(&tmpbuf[z], text, textlen) == 0) | |
2213 retval = z + textlen; | |
2214 } | |
2215 } | |
2216 else | |
2217 { | |
2218 for(z=point;z<(len-textlen) && !retval;z++) | |
2219 { | |
2220 if(strncasecmp(&tmpbuf[z], text, textlen) == 0) | |
2221 retval = z + textlen; | |
2222 } | |
2223 } | |
2224 | |
2225 if(retval) | |
2226 { | |
2227 gtk_text_set_point(GTK_TEXT(tmp), retval - textlen); | |
2228 gtk_editable_select_region(&(GTK_TEXT(tmp)->editable), retval - textlen, retval); | |
2229 } | |
2230 | |
2231 g_free(tmpbuf); | |
2232 } | |
2233 } | |
2234 } | |
2235 | |
2236 DW_MUTEX_UNLOCK; | |
2237 return retval; | |
2238 } | |
2239 | |
2240 /* | |
2241 * Stops redrawing of an MLE box. | |
2242 * Parameters: | |
2243 * handle: Handle to the MLE to freeze. | |
2244 */ | |
2245 void dw_mle_freeze(HWND handle) | |
2246 { | |
2247 int _locked_by_me = FALSE; | |
2248 | |
2249 DW_MUTEX_LOCK; | |
2250 if(GTK_IS_BOX(handle)) | |
2251 { | |
2252 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2253 | |
2254 if(tmp && GTK_IS_TEXT(tmp)) | |
2255 { | |
2256 gtk_text_freeze(GTK_TEXT(tmp)); | |
2257 } | |
2258 } | |
2259 DW_MUTEX_UNLOCK; | |
2260 } | |
2261 | |
2262 /* | |
2263 * Resumes redrawing of an MLE box. | |
2264 * Parameters: | |
2265 * handle: Handle to the MLE to thaw. | |
2266 */ | |
2267 void dw_mle_thaw(HWND handle) | |
2268 { | |
2269 int _locked_by_me = FALSE; | |
2270 | |
2271 DW_MUTEX_LOCK; | |
2272 if(GTK_IS_BOX(handle)) | |
2273 { | |
2274 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
2275 | |
2276 if(tmp && GTK_IS_TEXT(tmp)) | |
2277 { | |
2278 gtk_text_thaw(GTK_TEXT(tmp)); | |
2279 } | |
2280 } | |
2281 DW_MUTEX_UNLOCK; | |
2282 } | |
2283 | |
2284 /* | |
2285 * Returns the range of the slider. | |
2286 * Parameters: | |
2287 * handle: Handle to the slider to be queried. | |
2288 */ | |
2289 unsigned int dw_slider_query_range(HWND handle) | |
2290 { | |
2291 return 100; | |
2292 } | |
2293 | |
2294 /* | |
2295 * Sets the slider position. | |
2296 * Parameters: | |
2297 * handle: Handle to the slider to be set. | |
2298 * position: Position of the slider withing the range. | |
2299 */ | |
2300 void dw_slider_set_pos(HWND handle, unsigned int position) | |
2301 { | |
2302 int _locked_by_me = FALSE; | |
2303 | |
2304 DW_MUTEX_LOCK; | |
2305 gtk_progress_bar_update(GTK_PROGRESS_BAR(handle), (gfloat)position/100); | |
2306 DW_MUTEX_UNLOCK; | |
2307 } | |
2308 | |
2309 /* | |
2310 * Sets the spinbutton value. | |
2311 * Parameters: | |
2312 * handle: Handle to the spinbutton to be set. | |
2313 * position: Current value of the spinbutton. | |
2314 */ | |
2315 void dw_spinbutton_set_pos(HWND handle, long position) | |
2316 { | |
2317 int _locked_by_me = FALSE; | |
2318 | |
2319 DW_MUTEX_LOCK; | |
2320 gtk_spin_button_set_value(GTK_SPIN_BUTTON(handle), (gfloat)position); | |
2321 DW_MUTEX_UNLOCK; | |
2322 } | |
2323 | |
2324 /* | |
2325 * Sets the spinbutton limits. | |
2326 * Parameters: | |
2327 * handle: Handle to the spinbutton to be set. | |
2328 * position: Current value of the spinbutton. | |
2329 * position: Current value of the spinbutton. | |
2330 */ | |
2331 void dw_spinbutton_set_limits(HWND handle, long upper, long lower) | |
2332 { | |
2333 long curval; | |
2334 GtkAdjustment *adj; | |
2335 int _locked_by_me = FALSE; | |
2336 | |
2337 curval = dw_spinbutton_query(handle); | |
2338 DW_MUTEX_LOCK; | |
2339 adj = (GtkAdjustment *)gtk_adjustment_new((gfloat)curval, (gfloat)lower, (gfloat)upper, 1.0, 5.0, 0.0); | |
2340 DW_MUTEX_UNLOCK; | |
2341 } | |
2342 | |
2343 /* | |
2344 * Sets the entryfield character limit. | |
2345 * Parameters: | |
2346 * handle: Handle to the spinbutton to be set. | |
2347 * limit: Number of characters the entryfield will take. | |
2348 */ | |
2349 void dw_entryfield_set_limit(HWND handle, ULONG limit) | |
2350 { | |
2351 /* TODO: can this be done after the fact? */ | |
2352 } | |
2353 | |
2354 /* | |
2355 * Returns the current value of the spinbutton. | |
2356 * Parameters: | |
2357 * handle: Handle to the spinbutton to be queried. | |
2358 */ | |
2359 long dw_spinbutton_query(HWND handle) | |
2360 { | |
2361 long retval; | |
2362 int _locked_by_me = FALSE; | |
2363 | |
2364 DW_MUTEX_LOCK; | |
2365 retval = (long)gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(handle)); | |
2366 DW_MUTEX_UNLOCK; | |
2367 | |
2368 return retval; | |
2369 } | |
2370 | |
2371 /* | |
2372 * Returns the state of the checkbox. | |
2373 * Parameters: | |
2374 * handle: Handle to the checkbox to be queried. | |
2375 */ | |
2376 int dw_checkbox_query(HWND handle) | |
2377 { | |
2378 int retval; | |
2379 int _locked_by_me = FALSE; | |
2380 | |
2381 DW_MUTEX_LOCK; | |
2382 retval = GTK_TOGGLE_BUTTON(handle)->active; | |
2383 DW_MUTEX_UNLOCK; | |
2384 | |
2385 return retval; | |
2386 } | |
2387 | |
2388 /* | |
2389 * Sets the state of the checkbox. | |
2390 * Parameters: | |
2391 * handle: Handle to the checkbox to be queried. | |
2392 * value: TRUE for checked, FALSE for unchecked. | |
2393 */ | |
2394 void dw_checkbox_set(HWND handle, int value) | |
2395 { | |
2396 int _locked_by_me = FALSE; | |
2397 | |
2398 DW_MUTEX_LOCK; | |
2399 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(handle), value); | |
2400 DW_MUTEX_UNLOCK; | |
2401 } | |
2402 | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2403 /* |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2404 * Inserts an item into a tree window (widget). |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2405 * Parameters: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2406 * handle: Handle to the tree to be inserted. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2407 * title: The text title of the entry. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2408 * icon: Handle to coresponding icon. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2409 * parent: Parent handle or 0 if root. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2410 */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2411 HWND dw_tree_insert(HWND handle, char *title, unsigned long icon, HWND parent) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2412 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2413 GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2414 GdkPixmap *gdkpix; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2415 GdkBitmap *gdkbmp; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2416 int _locked_by_me = FALSE; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2417 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2418 DW_MUTEX_LOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2419 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2420 if(!tree || !GTK_IS_TREE(tree)) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2421 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2422 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2423 return NULL; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2424 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2425 item = gtk_tree_item_new(); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2426 label = gtk_label_new(title); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2427 hbox = gtk_hbox_new(FALSE, 2); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2428 gdkpix = _find_pixmap(&gdkbmp, icon, hbox); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2429 pixmap = gtk_pixmap_new(gdkpix, gdkbmp); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2430 gtk_container_add(GTK_CONTAINER(item), hbox); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2431 gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2432 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2433 gtk_widget_show(label); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2434 gtk_widget_show(pixmap); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2435 gtk_widget_show(hbox); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2436 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2437 if(parent) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2438 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2439 subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2440 if(!subtree) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2441 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2442 subtree = gtk_tree_new(); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2443 gtk_object_set_user_data(GTK_OBJECT(parent), subtree); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2444 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2445 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2446 gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2447 gtk_widget_show(subtree); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2448 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2449 gtk_tree_append(GTK_TREE(subtree), item); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2450 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2451 else |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2452 gtk_tree_append(GTK_TREE(tree), item); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2453 gtk_widget_show(item); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2454 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2455 return item; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2456 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2457 |
3 | 2458 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) |
2459 { | |
2460 GtkWidget *clist; | |
2461 char numbuf[10]; | |
2462 int z; | |
2463 int _locked_by_me = FALSE; | |
2464 | |
2465 DW_MUTEX_LOCK; | |
2466 clist = gtk_clist_new_with_titles(count, (gchar **)titles); | |
2467 if(!clist) | |
2468 { | |
2469 DW_MUTEX_UNLOCK; | |
2470 return FALSE; | |
2471 } | |
2472 | |
2473 gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(_select_row), NULL); | |
2474 gtk_signal_connect(GTK_OBJECT(clist), "unselect_row", GTK_SIGNAL_FUNC(_unselect_row), NULL); | |
2475 | |
2476 gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); | |
2477 gtk_container_add(GTK_CONTAINER(handle), clist); | |
2478 gtk_object_set_user_data(GTK_OBJECT(handle), (gpointer)clist); | |
2479 gtk_widget_show(clist); | |
2480 gtk_object_set_data(GTK_OBJECT(clist), "colcount", (gpointer)count); | |
2481 | |
2482 if(extra) | |
2483 gtk_clist_set_column_width(GTK_CLIST(clist), 1, 120); | |
2484 | |
2485 for(z=0;z<count;z++) | |
2486 { | |
2487 if(!extra || z > 1) | |
2488 gtk_clist_set_column_width(GTK_CLIST(clist), z, 50); | |
2489 sprintf(numbuf, "%d", z); | |
2490 gtk_object_set_data(GTK_OBJECT(clist), numbuf, (gpointer)flags[z]); | |
2491 } | |
2492 | |
2493 DW_MUTEX_UNLOCK; | |
2494 return TRUE; | |
2495 } | |
2496 | |
2497 /* | |
2498 * Sets up the container columns. | |
2499 * Parameters: | |
2500 * handle: Handle to the container to be configured. | |
2501 * flags: An array of unsigned longs with column flags. | |
2502 * titles: An array of strings with column text titles. | |
2503 * count: The number of columns (this should match the arrays). | |
2504 * separator: The column number that contains the main separator. | |
2505 * (this item may only be used in OS/2) | |
2506 */ | |
2507 int dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator) | |
2508 { | |
2509 return _dw_container_setup(handle, flags, titles, count, separator, 0); | |
2510 } | |
2511 | |
2512 /* | |
2513 * Sets up the filesystem columns, note: filesystem always has an icon/filename field. | |
2514 * Parameters: | |
2515 * handle: Handle to the container to be configured. | |
2516 * flags: An array of unsigned longs with column flags. | |
2517 * titles: An array of strings with column text titles. | |
2518 * count: The number of columns (this should match the arrays). | |
2519 */ | |
2520 int dw_filesystem_setup(HWND handle, unsigned long *flags, char **titles, int count) | |
2521 { | |
2522 char **newtitles = malloc(sizeof(char *) * (count + 2)); | |
2523 unsigned long *newflags = malloc(sizeof(unsigned long) * (count + 2)); | |
2524 | |
2525 newtitles[0] = "Icon"; | |
2526 newtitles[1] = "Filename"; | |
2527 | |
2528 newflags[0] = DW_CFA_BITMAPORICON | DW_CFA_CENTER | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR; | |
2529 newflags[1] = DW_CFA_STRING | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR; | |
2530 | |
2531 memcpy(&newtitles[2], titles, sizeof(char *) * count); | |
2532 memcpy(&newflags[2], flags, sizeof(unsigned long) * count); | |
2533 | |
2534 _dw_container_setup(handle, newflags, newtitles, count + 2, 2, 1); | |
2535 | |
2536 free(newtitles); | |
2537 free(newflags); | |
2538 return TRUE; | |
2539 } | |
2540 | |
2541 /* | |
2542 * Obtains an icon from a module (or header in GTK). | |
2543 * Parameters: | |
2544 * module: Handle to module (DLL) in OS/2 and Windows. | |
2545 * id: A unsigned long id int the resources on OS/2 and | |
2546 * Windows, on GTK this is converted to a pointer | |
2547 * to an embedded XPM. | |
2548 */ | |
2549 unsigned long dw_icon_load(unsigned long module, unsigned long id) | |
2550 { | |
2551 return id; | |
2552 } | |
2553 | |
2554 /* | |
2555 * Frees a loaded resource in OS/2 and Windows. | |
2556 * Parameters: | |
2557 * handle: Handle to icon returned by dw_icon_load(). | |
2558 */ | |
2559 void dw_icon_free(unsigned long handle) | |
2560 { | |
2561 } | |
2562 | |
2563 /* | |
2564 * Allocates memory used to populate a container. | |
2565 * Parameters: | |
2566 * handle: Handle to the container window (widget). | |
2567 * rowcount: The number of items to be populated. | |
2568 */ | |
2569 void *dw_container_alloc(HWND handle, int rowcount) | |
2570 { | |
2571 int z, count = 0; | |
2572 GtkWidget *clist; | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2573 GdkColor *fore, *back; |
3 | 2574 char **blah; |
2575 int _locked_by_me = FALSE; | |
2576 | |
2577 DW_MUTEX_LOCK; | |
2578 clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
2579 if(!clist) | |
2580 { | |
2581 DW_MUTEX_UNLOCK; | |
2582 return NULL; | |
2583 } | |
2584 | |
2585 count = (int)gtk_object_get_data(GTK_OBJECT(clist), "colcount"); | |
2586 | |
2587 if(!count) | |
2588 { | |
2589 DW_MUTEX_UNLOCK; | |
2590 return NULL; | |
2591 } | |
2592 | |
2593 blah = malloc(sizeof(char *) * count); | |
2594 memset(blah, 0, sizeof(char *) * count); | |
2595 | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2596 fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(clist), "foregdk"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2597 back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(clist), "backgdk"); |
3 | 2598 gtk_clist_freeze(GTK_CLIST(clist)); |
2599 for(z=0;z<rowcount;z++) | |
2600 { | |
2601 gtk_clist_append(GTK_CLIST(clist), blah); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2602 if(fore) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2603 gtk_clist_set_foreground(GTK_CLIST(clist), z, fore); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2604 if(back) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2605 gtk_clist_set_background(GTK_CLIST(clist), z, back); |
3 | 2606 } |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2607 gtk_object_set_data(GTK_OBJECT(clist), "rowcount", (gpointer)rowcount); |
3 | 2608 free(blah); |
2609 DW_MUTEX_UNLOCK; | |
2610 return (void *)handle; | |
2611 } | |
2612 | |
2613 /* | |
2614 * Sets an item in specified row and column to the given data. | |
2615 * Parameters: | |
2616 * handle: Handle to the container window (widget). | |
2617 * pointer: Pointer to the allocated memory in dw_container_alloc(). | |
2618 * column: Zero based column of data being set. | |
2619 * row: Zero based row of data being set. | |
2620 * data: Pointer to the data to be added. | |
2621 */ | |
2622 void dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) | |
2623 { | |
2624 char numbuf[10], textbuffer[100]; | |
2625 int flag = 0; | |
2626 GtkWidget *clist; | |
2627 int _locked_by_me = FALSE; | |
2628 | |
2629 DW_MUTEX_LOCK; | |
2630 clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
2631 if(!clist) | |
2632 { | |
2633 DW_MUTEX_UNLOCK; | |
2634 return; | |
2635 } | |
2636 | |
2637 sprintf(numbuf, "%d", column); | |
2638 flag = (int)gtk_object_get_data(GTK_OBJECT(clist), numbuf); | |
2639 | |
2640 if(flag & DW_CFA_BITMAPORICON) | |
2641 { | |
2642 long hicon = *((long *)data); | |
2643 GdkBitmap *bitmap; | |
2644 GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist); | |
2645 | |
2646 if(pixmap) | |
2647 gtk_clist_set_pixmap(GTK_CLIST(clist), row, column, pixmap, bitmap); | |
2648 } | |
2649 else if(flag & DW_CFA_STRING) | |
2650 { | |
2651 char *tmp = *((char **)data); | |
2652 gtk_clist_set_text(GTK_CLIST(clist), row, column, tmp); | |
2653 } | |
2654 else if(flag & DW_CFA_ULONG) | |
2655 { | |
2656 ULONG tmp = *((ULONG *)data); | |
2657 | |
2658 sprintf(textbuffer, "%lu", tmp); | |
2659 | |
2660 gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); | |
2661 } | |
2662 else if(flag & DW_CFA_DATE) | |
2663 { | |
2664 CDATE fdate = *((CDATE *)data); | |
2665 | |
2666 sprintf(textbuffer, "%s %d, %d", monthlist[fdate.month], fdate.day, fdate.year); | |
2667 gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); | |
2668 } | |
2669 else if(flag & DW_CFA_TIME) | |
2670 { | |
2671 CTIME ftime = *((CTIME *)data); | |
2672 | |
2673 if(ftime.hours > 12) | |
2674 sprintf(textbuffer, "%d:%s%dpm", ftime.hours - 12, (ftime.minutes < 10) ? "0" : "", ftime.minutes); | |
2675 else | |
2676 sprintf(textbuffer, "%d:%s%dam", ftime.hours ? ftime.hours : 12, (ftime.minutes < 10) ? "0" : "", ftime.minutes); | |
2677 gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); | |
2678 } | |
2679 DW_MUTEX_UNLOCK; | |
2680 } | |
2681 | |
2682 /* | |
2683 * Sets an item in specified row and column to the given data. | |
2684 * Parameters: | |
2685 * handle: Handle to the container window (widget). | |
2686 * pointer: Pointer to the allocated memory in dw_container_alloc(). | |
2687 * column: Zero based column of data being set. | |
2688 * row: Zero based row of data being set. | |
2689 * data: Pointer to the data to be added. | |
2690 */ | |
2691 void dw_filesystem_set_file(HWND handle, void *pointer, int row, char *filename, unsigned long icon) | |
2692 { | |
2693 dw_container_set_item(handle, pointer, 0, row, (void *)&icon); | |
2694 dw_container_set_item(handle, pointer, 1, row, (void *)&filename); | |
2695 } | |
2696 | |
2697 /* | |
2698 * Sets an item in specified row and column to the given data. | |
2699 * Parameters: | |
2700 * handle: Handle to the container window (widget). | |
2701 * pointer: Pointer to the allocated memory in dw_container_alloc(). | |
2702 * column: Zero based column of data being set. | |
2703 * row: Zero based row of data being set. | |
2704 * data: Pointer to the data to be added. | |
2705 */ | |
2706 void dw_filesystem_set_item(HWND handle, void *pointer, int column, int row, void *data) | |
2707 { | |
2708 dw_container_set_item(handle, pointer, column + 2, row, data); | |
2709 } | |
2710 | |
2711 /* | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2712 * Sets the width of a column in the container. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2713 * Parameters: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2714 * handle: Handle to window (widget) of container. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2715 * column: Zero based column of width being set. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2716 * width: Width of column in pixels. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2717 */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2718 void dw_container_set_column_width(HWND handle, int column, int width) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2719 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2720 GtkWidget *clist; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2721 int _locked_by_me = FALSE; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2722 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2723 DW_MUTEX_LOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2724 clist = gtk_object_get_user_data(GTK_OBJECT(handle)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2725 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2726 if(clist && GTK_IS_CLIST(clist)) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2727 gtk_clist_set_column_width(GTK_CLIST(clist), column, width); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2728 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2729 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2730 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2731 /* |
3 | 2732 * Sets the title of a row in the container. |
2733 * Parameters: | |
2734 * pointer: Pointer to the allocated memory in dw_container_alloc(). | |
2735 * row: Zero based row of data being set. | |
2736 * title: String title of the item. | |
2737 */ | |
2738 void dw_container_set_row_title(void *pointer, int row, char *title) | |
2739 { | |
2740 GtkWidget *clist; | |
2741 int _locked_by_me = FALSE; | |
2742 | |
2743 DW_MUTEX_LOCK; | |
2744 clist = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(pointer)); | |
2745 | |
2746 if(clist) | |
2747 gtk_clist_set_row_data(GTK_CLIST(clist), row, (gpointer)title); | |
2748 DW_MUTEX_UNLOCK; | |
2749 } | |
2750 | |
2751 /* | |
2752 * Sets the title of a row in the container. | |
2753 * Parameters: | |
2754 * handle: Handle to the container window (widget). | |
2755 * pointer: Pointer to the allocated memory in dw_container_alloc(). | |
2756 * rowcount: The number of rows to be inserted. | |
2757 */ | |
2758 void dw_container_insert(HWND handle, void *pointer, int rowcount) | |
2759 { | |
2760 GtkWidget *clist; | |
2761 int _locked_by_me = FALSE; | |
2762 | |
2763 DW_MUTEX_LOCK; | |
2764 clist = gtk_object_get_user_data(GTK_OBJECT(handle)); | |
2765 | |
2766 if(clist && GTK_IS_CLIST(clist)) | |
2767 gtk_clist_thaw(GTK_CLIST(clist)); | |
2768 DW_MUTEX_UNLOCK; | |
2769 } | |
2770 | |
2771 /* | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2772 * Removes the first x rows from a container. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2773 * Parameters: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2774 * handle: Handle to the window (widget) to be deleted from. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2775 * rowcount: The number of rows to be deleted. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2776 */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2777 void dw_container_delete(HWND handle, int rowcount) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2778 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2779 GtkWidget *clist; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2780 GList *list; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2781 int _locked_by_me = FALSE; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2782 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2783 DW_MUTEX_LOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2784 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2785 if(clist && GTK_IS_CLIST(clist)) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2786 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2787 int rows, z; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2788 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2789 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist"); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2790 rows = (int)gtk_object_get_data(GTK_OBJECT(clist), "rowcount"); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2791 g_list_free(list); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2792 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2793 for(z=0;z<rowcount;z++) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2794 gtk_clist_remove(GTK_CLIST(clist), 0); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2795 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2796 if(rows - rowcount < 0) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2797 rows = 0; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2798 else |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2799 rows -= rowcount; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2800 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2801 gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2802 gtk_object_set_data(GTK_OBJECT(clist), "rowcount", (gpointer)rows); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2803 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2804 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2805 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2806 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2807 /* |
3 | 2808 * Removes all rows from a container. |
2809 * Parameters: | |
2810 * handle: Handle to the window (widget) to be cleared. | |
2811 */ | |
2812 void dw_container_clear(HWND handle) | |
2813 { | |
2814 GtkWidget *clist; | |
2815 GList *list; | |
2816 int _locked_by_me = FALSE; | |
2817 | |
2818 DW_MUTEX_LOCK; | |
2819 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
2820 if(clist && GTK_IS_CLIST(clist)) | |
2821 { | |
2822 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist"); | |
2823 g_list_free(list); | |
2824 gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL); | |
2825 gtk_clist_clear(GTK_CLIST(clist)); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
2826 gtk_object_set_data(GTK_OBJECT(clist), "rowcount", (gpointer)0); |
3 | 2827 } |
2828 DW_MUTEX_UNLOCK; | |
2829 } | |
2830 | |
2831 /* | |
2832 * Removes all rows from a container. | |
2833 * Parameters: | |
2834 * handle: Handle to the window (widget) to be cleared. | |
2835 */ | |
2836 void dw_container_set_view(HWND handle, unsigned long flags, int iconwidth, int iconheight) | |
2837 { | |
2838 } | |
2839 | |
2840 /* | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2841 * Scrolls container up or down. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2842 * Parameters: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2843 * handle: Handle to the window (widget) to be scrolled. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2844 * direction: DW_SCROLL_UP, DW_SCROLL_DOWN, DW_SCROLL_TOP or |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2845 * DW_SCROLL_BOTTOM. (rows is ignored for last two) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2846 * rows: The number of rows to be scrolled. |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2847 */ |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2848 void dw_container_scroll(HWND handle, int direction, long rows) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2849 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2850 GtkAdjustment *adj; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2851 GtkWidget *clist; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2852 int _locked_by_me = FALSE; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2853 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2854 DW_MUTEX_LOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2855 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2856 if(clist && GTK_IS_CLIST(clist)) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2857 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2858 adj = gtk_clist_get_vadjustment(GTK_CLIST(clist)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2859 if(adj) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2860 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2861 switch(direction) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2862 { |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2863 case DW_SCROLL_TOP: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2864 adj->value = adj->lower; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2865 break; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2866 case DW_SCROLL_BOTTOM: |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2867 adj->value = adj->upper; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2868 break; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2869 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2870 gtk_clist_set_vadjustment(GTK_CLIST(clist), adj); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2871 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2872 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2873 DW_MUTEX_UNLOCK; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2874 } |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2875 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
2876 /* |
3 | 2877 * Starts a new query of a container. |
2878 * Parameters: | |
2879 * handle: Handle to the window (widget) to be queried. | |
2880 * flags: If this parameter is DW_CRA_SELECTED it will only | |
2881 * return items that are currently selected. Otherwise | |
2882 * it will return all records in the container. | |
2883 */ | |
2884 char *dw_container_query_start(HWND handle, unsigned long flags) | |
2885 { | |
2886 GtkWidget *clist; | |
2887 GList *list; | |
2888 char *retval = NULL; | |
2889 int _locked_by_me = FALSE; | |
2890 | |
2891 DW_MUTEX_LOCK; | |
2892 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
2893 | |
2894 if(!clist) | |
2895 { | |
2896 DW_MUTEX_UNLOCK; | |
2897 return NULL; | |
2898 } | |
2899 | |
2900 /* If there is an old query list, free it */ | |
2901 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist"); | |
2902 if(list) | |
2903 g_list_free(list); | |
2904 | |
2905 /* Move the current selection list to the query list, and remove the | |
2906 * current selection list. | |
2907 */ | |
2908 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist"); | |
2909 gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL); | |
2910 gtk_object_set_data(GTK_OBJECT(clist), "querylist", (gpointer)list); | |
2911 gtk_clist_unselect_all(GTK_CLIST(clist)); | |
2912 | |
2913 if(list) | |
2914 { | |
2915 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1); | |
2916 if(list->data) | |
2917 retval = list->data; | |
2918 else | |
2919 retval = ""; | |
2920 } | |
2921 DW_MUTEX_UNLOCK; | |
2922 return retval; | |
2923 } | |
2924 | |
2925 /* | |
2926 * Continues an existing query of a container. | |
2927 * Parameters: | |
2928 * handle: Handle to the window (widget) to be queried. | |
2929 * flags: If this parameter is DW_CRA_SELECTED it will only | |
2930 * return items that are currently selected. Otherwise | |
2931 * it will return all records in the container. | |
2932 */ | |
2933 char *dw_container_query_next(HWND handle, unsigned long flags) | |
2934 { | |
2935 GtkWidget *clist; | |
2936 GList *list; | |
2937 char *retval = NULL; | |
2938 int _locked_by_me = FALSE; | |
2939 | |
2940 DW_MUTEX_LOCK; | |
2941 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
2942 | |
2943 if(!clist) | |
2944 { | |
2945 DW_MUTEX_UNLOCK; | |
2946 return NULL; | |
2947 } | |
2948 | |
2949 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist"); | |
2950 | |
2951 if(list) | |
2952 { | |
2953 int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos"); | |
2954 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)pos+1); | |
2955 | |
2956 while(list && counter < pos) | |
2957 { | |
2958 list = list->next; | |
2959 counter++; | |
2960 } | |
2961 | |
2962 if(list && list->data) | |
2963 retval = list->data; | |
2964 else if(list && !list->data) | |
2965 retval = ""; | |
2966 } | |
2967 DW_MUTEX_UNLOCK; | |
2968 return retval; | |
2969 } | |
2970 | |
2971 /* | |
2972 * Creates a rendering context widget (window) to be packed. | |
2973 * Parameters: | |
2974 * id: An id to be used with dw_window_from_id. | |
2975 * Returns: | |
2976 * A handle to the widget or NULL on failure. | |
2977 */ | |
2978 HWND dw_render_new(unsigned long id) | |
2979 { | |
2980 int _locked_by_me = FALSE; | |
2981 GtkWidget *tmp; | |
2982 | |
2983 DW_MUTEX_LOCK; | |
2984 tmp = gtk_drawing_area_new(); | |
2985 gtk_widget_set_events(tmp, GDK_EXPOSURE_MASK | |
2986 | GDK_LEAVE_NOTIFY_MASK | |
2987 | GDK_BUTTON_PRESS_MASK | |
2988 | GDK_POINTER_MOTION_MASK | |
2989 | GDK_POINTER_MOTION_HINT_MASK); | |
2990 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | |
2991 gtk_widget_show(tmp); | |
2992 DW_MUTEX_UNLOCK; | |
2993 return tmp; | |
2994 } | |
2995 | |
2996 /* Sets the current foreground drawing color. | |
2997 * Parameters: | |
2998 * red: red value. | |
2999 * green: green value. | |
3000 * blue: blue value. | |
3001 */ | |
3002 void dw_color_foreground_set(unsigned long value) | |
3003 { | |
3004 int _locked_by_me = FALSE; | |
3005 GdkColor color = { 0, DW_RED_VALUE(value) << 8, DW_GREEN_VALUE(value) << 8, DW_BLUE_VALUE(value) << 8 }; | |
3006 | |
3007 DW_MUTEX_LOCK; | |
3008 gdk_color_alloc(_dw_cmap, &color); | |
3009 _foreground = color; | |
3010 DW_MUTEX_UNLOCK; | |
3011 } | |
3012 | |
3013 /* Sets the current background drawing color. | |
3014 * Parameters: | |
3015 * red: red value. | |
3016 * green: green value. | |
3017 * blue: blue value. | |
3018 */ | |
3019 void dw_color_background_set(unsigned long value) | |
3020 { | |
3021 int _locked_by_me = FALSE; | |
3022 GdkColor color = { 0, DW_RED_VALUE(value) << 8, DW_GREEN_VALUE(value) << 8, DW_BLUE_VALUE(value) << 8 }; | |
3023 | |
3024 DW_MUTEX_LOCK; | |
3025 gdk_color_alloc(_dw_cmap, &color); | |
3026 _background = color; | |
3027 DW_MUTEX_UNLOCK; | |
3028 } | |
3029 | |
3030 GdkGC *_set_colors(GdkWindow *window) | |
3031 { | |
3032 GdkGC *gc; | |
3033 if(!window) | |
3034 return NULL; | |
3035 gc = gdk_gc_new(window); | |
3036 if(gc) | |
3037 { | |
3038 gdk_gc_set_foreground(gc, &_foreground); | |
3039 gdk_gc_set_background(gc, &_background); | |
3040 } | |
3041 return gc; | |
3042 } | |
3043 | |
3044 /* Draw a point on a window (preferably a render window). | |
3045 * Parameters: | |
3046 * handle: Handle to the window. | |
3047 * pixmap: Handle to the pixmap. (choose only one of these) | |
3048 * x: X coordinate. | |
3049 * y: Y coordinate. | |
3050 */ | |
3051 void dw_draw_point(HWND handle, HPIXMAP pixmap, int x, int y) | |
3052 { | |
3053 int _locked_by_me = FALSE; | |
3054 GdkGC *gc = NULL; | |
3055 | |
3056 DW_MUTEX_LOCK; | |
3057 if(handle) | |
3058 gc = _set_colors(handle->window); | |
3059 else if(pixmap) | |
3060 gc = _set_colors(pixmap->pixmap); | |
3061 if(gc) | |
3062 { | |
3063 gdk_draw_point(handle ? handle->window : pixmap->pixmap, gc, x, y); | |
3064 gdk_gc_unref(gc); | |
3065 } | |
3066 DW_MUTEX_UNLOCK; | |
3067 } | |
3068 | |
3069 /* Draw a line on a window (preferably a render window). | |
3070 * Parameters: | |
3071 * handle: Handle to the window. | |
3072 * pixmap: Handle to the pixmap. (choose only one of these) | |
3073 * x1: First X coordinate. | |
3074 * y1: First Y coordinate. | |
3075 * x2: Second X coordinate. | |
3076 * y2: Second Y coordinate. | |
3077 */ | |
3078 void dw_draw_line(HWND handle, HPIXMAP pixmap, int x1, int y1, int x2, int y2) | |
3079 { | |
3080 int _locked_by_me = FALSE; | |
3081 GdkGC *gc = NULL; | |
3082 | |
3083 DW_MUTEX_LOCK; | |
3084 if(handle) | |
3085 gc = _set_colors(handle->window); | |
3086 else if(pixmap) | |
3087 gc = _set_colors(pixmap->pixmap); | |
3088 if(gc) | |
3089 { | |
3090 gdk_draw_line(handle ? handle->window : pixmap->pixmap, gc, x1, y1, x2, y2); | |
3091 gdk_gc_unref(gc); | |
3092 } | |
3093 DW_MUTEX_UNLOCK; | |
3094 } | |
3095 | |
3096 /* Draw a rectangle on a window (preferably a render window). | |
3097 * Parameters: | |
3098 * handle: Handle to the window. | |
3099 * pixmap: Handle to the pixmap. (choose only one of these) | |
3100 * x: X coordinate. | |
3101 * y: Y coordinate. | |
3102 * width: Width of rectangle. | |
3103 * height: Height of rectangle. | |
3104 */ | |
3105 void dw_draw_rect(HWND handle, HPIXMAP pixmap, int fill, int x, int y, int width, int height) | |
3106 { | |
3107 int _locked_by_me = FALSE; | |
3108 GdkGC *gc = NULL; | |
3109 | |
3110 DW_MUTEX_LOCK; | |
3111 if(handle) | |
3112 gc = _set_colors(handle->window); | |
3113 else if(pixmap) | |
3114 gc = _set_colors(pixmap->pixmap); | |
3115 if(gc) | |
3116 { | |
3117 gdk_draw_rectangle(handle ? handle->window : pixmap->pixmap, gc, fill, x, y, width, height); | |
3118 gdk_gc_unref(gc); | |
3119 } | |
3120 DW_MUTEX_UNLOCK; | |
3121 } | |
3122 | |
3123 /* Draw text on a window (preferably a render window). | |
3124 * Parameters: | |
3125 * handle: Handle to the window. | |
3126 * pixmap: Handle to the pixmap. (choose only one of these) | |
3127 * x: X coordinate. | |
3128 * y: Y coordinate. | |
3129 * text: Text to be displayed. | |
3130 */ | |
3131 void dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text) | |
3132 { | |
3133 int _locked_by_me = FALSE; | |
3134 GdkGC *gc = NULL; | |
3135 GdkFont *font; | |
3136 char *fontname = "fixed"; | |
3137 | |
3138 DW_MUTEX_LOCK; | |
3139 if(handle) | |
3140 { | |
3141 fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "fontname"); | |
3142 gc = _set_colors(handle->window); | |
3143 } | |
3144 else if(pixmap) | |
3145 { | |
3146 fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "fontname"); | |
3147 gc = _set_colors(pixmap->pixmap); | |
3148 } | |
3149 if(gc) | |
3150 { | |
3151 font = gdk_font_load(fontname); | |
3152 if(font) | |
3153 { | |
3154 gint ascent; | |
3155 | |
3156 gdk_text_extents(font, text, strlen(text), NULL, NULL, NULL, &ascent, NULL); | |
3157 gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent, text, strlen(text)); | |
3158 gdk_gc_unref(gc); | |
3159 gdk_font_unref(font); | |
3160 } | |
3161 } | |
3162 DW_MUTEX_UNLOCK; | |
3163 } | |
3164 | |
3165 /* | |
3166 * Creates a pixmap with given parameters. | |
3167 * Parameters: | |
3168 * handle: Window handle the pixmap is associated with. | |
3169 * width: Width of the pixmap in pixels. | |
3170 * height: Height of the pixmap in pixels. | |
3171 * depth: Color depth of the pixmap. | |
3172 * Returns: | |
3173 * A handle to a pixmap or NULL on failure. | |
3174 */ | |
3175 HPIXMAP dw_pixmap_new(HWND handle, unsigned long width, unsigned long height, int depth) | |
3176 { | |
3177 int _locked_by_me = FALSE; | |
3178 HPIXMAP pixmap; | |
3179 | |
3180 if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) | |
3181 return NULL; | |
3182 | |
3183 if (!depth) | |
3184 depth = 24; | |
3185 | |
3186 pixmap->width = width; pixmap->height = height; | |
3187 | |
3188 | |
3189 DW_MUTEX_LOCK; | |
3190 pixmap->handle = handle; | |
3191 pixmap->pixmap = gdk_pixmap_new(handle->window, width, height, depth); | |
3192 DW_MUTEX_UNLOCK; | |
3193 return pixmap; | |
3194 } | |
3195 | |
3196 /* | |
3197 * Creates a pixmap from internal resource graphic specified by id. | |
3198 * Parameters: | |
3199 * handle: Window handle the pixmap is associated with. | |
3200 * id: Resource ID associated with requested pixmap. | |
3201 * Returns: | |
3202 * A handle to a pixmap or NULL on failure. | |
3203 */ | |
3204 HPIXMAP dw_pixmap_grab(HWND handle, ULONG id) | |
3205 { | |
3206 GdkBitmap *bitmap; | |
3207 HPIXMAP pixmap; | |
3208 int _locked_by_me = FALSE; | |
3209 | |
3210 if (!(pixmap = calloc(1,sizeof(struct _hpixmap)))) | |
3211 return NULL; | |
3212 | |
3213 | |
3214 DW_MUTEX_LOCK; | |
3215 pixmap->pixmap = _find_pixmap(&bitmap, id, handle); | |
3216 if(pixmap->pixmap) | |
3217 { | |
3218 GdkPixmapPrivate *pvt = (GdkPixmapPrivate *)pixmap->pixmap; | |
3219 pixmap->width = pvt->width; pixmap->height = pvt->height; | |
3220 } | |
3221 DW_MUTEX_UNLOCK; | |
3222 return pixmap; | |
3223 } | |
3224 | |
3225 /* Call this after drawing to the screen to make sure | |
3226 * anything you have drawn is visible. | |
3227 */ | |
3228 void dw_flush(void) | |
3229 { | |
3230 int _locked_by_me = FALSE; | |
3231 | |
3232 DW_MUTEX_LOCK; | |
3233 gdk_flush(); | |
3234 DW_MUTEX_UNLOCK; | |
3235 } | |
3236 | |
3237 /* | |
3238 * Destroys an allocated pixmap. | |
3239 * Parameters: | |
3240 * pixmap: Handle to a pixmap returned by | |
3241 * dw_pixmap_new.. | |
3242 */ | |
3243 void dw_pixmap_destroy(HPIXMAP pixmap) | |
3244 { | |
3245 int _locked_by_me = FALSE; | |
3246 | |
3247 DW_MUTEX_LOCK; | |
3248 gdk_pixmap_unref(pixmap->pixmap); | |
3249 free(pixmap); | |
3250 DW_MUTEX_UNLOCK; | |
3251 } | |
3252 | |
3253 /* | |
3254 * Copies from one item to another. | |
3255 * Parameters: | |
3256 * dest: Destination window handle. | |
3257 * destp: Destination pixmap. (choose only one). | |
3258 * xdest: X coordinate of destination. | |
3259 * ydest: Y coordinate of destination. | |
3260 * width: Width of area to copy. | |
3261 * height: Height of area to copy. | |
3262 * src: Source window handle. | |
3263 * srcp: Source pixmap. (choose only one). | |
3264 * xsrc: X coordinate of source. | |
3265 * ysrc: Y coordinate of source. | |
3266 */ | |
3267 void dw_pixmap_bitblt(HWND dest, HPIXMAP destp, int xdest, int ydest, int width, int height, HWND src, HPIXMAP srcp, int xsrc, int ysrc) | |
3268 { | |
3269 int _locked_by_me = FALSE; | |
3270 GdkGC *gc = NULL; | |
3271 | |
3272 if((!dest && !destp) || (!src && !srcp)) | |
3273 return; | |
3274 | |
3275 DW_MUTEX_LOCK; | |
3276 if(dest) | |
3277 gc = _set_colors(dest->window); | |
3278 else if(src) | |
3279 gc = _set_colors(src->window); | |
3280 else if(destp) | |
3281 gc = gdk_gc_new(destp->pixmap); | |
3282 else if(srcp) | |
3283 gc = gdk_gc_new(srcp->pixmap); | |
3284 | |
3285 if(gc) | |
3286 { | |
3287 gdk_draw_pixmap(dest ? dest->window : destp->pixmap, gc, src ? src->window : srcp->pixmap, xsrc, ysrc, xdest, ydest, width, height); | |
3288 gdk_gc_unref(gc); | |
3289 } | |
3290 DW_MUTEX_UNLOCK; | |
3291 } | |
3292 | |
3293 /* | |
3294 * Emits a beep. | |
3295 * Parameters: | |
3296 * freq: Frequency. | |
3297 * dur: Duration. | |
3298 */ | |
3299 void dw_beep(int freq, int dur) | |
3300 { | |
3301 int _locked_by_me = FALSE; | |
3302 | |
3303 DW_MUTEX_LOCK; | |
3304 gdk_beep(); | |
3305 DW_MUTEX_UNLOCK; | |
3306 } | |
3307 | |
3308 /* | |
3309 * Returns the handle to an unnamed mutex semaphore. | |
3310 */ | |
3311 HMTX dw_mutex_new(void) | |
3312 { | |
3313 HMTX mutex; | |
3314 | |
3315 pthread_mutex_init(&mutex, NULL); | |
3316 return mutex; | |
3317 } | |
3318 | |
3319 /* | |
3320 * Closes a semaphore created by dw_mutex_new(). | |
3321 * Parameters: | |
3322 * mutex: The handle to the mutex returned by dw_mutex_new(). | |
3323 */ | |
3324 void dw_mutex_close(HMTX mutex) | |
3325 { | |
3326 pthread_mutex_destroy(&mutex); | |
3327 } | |
3328 | |
3329 /* | |
3330 * Tries to gain access to the semaphore, if it can't it blocks. | |
3331 * Parameters: | |
3332 * mutex: The handle to the mutex returned by dw_mutex_new(). | |
3333 */ | |
3334 void dw_mutex_lock(HMTX mutex) | |
3335 { | |
3336 pthread_mutex_lock(&mutex); | |
3337 } | |
3338 | |
3339 /* | |
3340 * Reliquishes the access to the semaphore. | |
3341 * Parameters: | |
3342 * mutex: The handle to the mutex returned by dw_mutex_new(). | |
3343 */ | |
3344 void dw_mutex_unlock(HMTX mutex) | |
3345 { | |
3346 pthread_mutex_unlock(&mutex); | |
3347 } | |
3348 | |
3349 /* | |
3350 * Returns the handle to an unnamed event semaphore. | |
3351 */ | |
3352 HEV dw_event_new(void) | |
3353 { | |
3354 HEV eve = (HEV)malloc(sizeof(struct _dw_unix_event)); | |
3355 | |
3356 if(!eve) | |
3357 return NULL; | |
3358 | |
3359 /* We need to be careful here, mutexes on Linux are | |
3360 * FAST by default but are error checking on other | |
3361 * systems such as FreeBSD and OS/2, perhaps others. | |
3362 */ | |
3363 pthread_mutex_init (&(eve->mutex), NULL); | |
3364 pthread_mutex_lock (&(eve->mutex)); | |
3365 pthread_cond_init (&(eve->event), NULL); | |
3366 | |
3367 pthread_mutex_unlock (&(eve->mutex)); | |
3368 eve->alive = 1; | |
3369 eve->posted = 0; | |
3370 | |
3371 return eve; | |
3372 } | |
3373 | |
3374 /* | |
3375 * Resets a semaphore created by dw_event_new(). | |
3376 * Parameters: | |
3377 * eve: The handle to the event returned by dw_event_new(). | |
3378 */ | |
3379 int dw_event_reset (HEV eve) | |
3380 { | |
3381 if(!eve) | |
3382 return FALSE; | |
3383 | |
3384 pthread_mutex_lock (&(eve->mutex)); | |
3385 pthread_cond_broadcast (&(eve->event)); | |
3386 pthread_cond_init (&(eve->event), NULL); | |
3387 eve->posted = 0; | |
3388 pthread_mutex_unlock (&(eve->mutex)); | |
3389 return 0; | |
3390 } | |
3391 | |
3392 /* | |
3393 * Posts a semaphore created by dw_event_new(). Causing all threads | |
3394 * waiting on this event in dw_event_wait to continue. | |
3395 * Parameters: | |
3396 * eve: The handle to the event returned by dw_event_new(). | |
3397 */ | |
3398 int dw_event_post (HEV eve) | |
3399 { | |
3400 if(!eve) | |
3401 return FALSE; | |
3402 | |
3403 pthread_mutex_lock (&(eve->mutex)); | |
3404 pthread_cond_broadcast (&(eve->event)); | |
3405 eve->posted = 1; | |
3406 pthread_mutex_unlock (&(eve->mutex)); | |
3407 return 0; | |
3408 } | |
3409 | |
3410 /* | |
3411 * Waits on a semaphore created by dw_event_new(), until the | |
3412 * event gets posted or until the timeout expires. | |
3413 * Parameters: | |
3414 * eve: The handle to the event returned by dw_event_new(). | |
3415 */ | |
3416 int dw_event_wait(HEV eve, unsigned long timeout) | |
3417 { | |
3418 int rc; | |
3419 struct timeval now; | |
3420 struct timespec timeo; | |
3421 | |
3422 if(!eve) | |
3423 return FALSE; | |
3424 | |
3425 if(eve->posted) | |
3426 return 0; | |
3427 | |
3428 pthread_mutex_lock (&(eve->mutex)); | |
3429 gettimeofday(&now, 0); | |
3430 timeo.tv_sec = now.tv_sec + (timeout / 1000); | |
3431 timeo.tv_nsec = now.tv_usec * 1000; | |
3432 rc = pthread_cond_timedwait (&(eve->event), &(eve->mutex), &timeo); | |
3433 pthread_mutex_unlock (&(eve->mutex)); | |
3434 if(!rc) | |
3435 return 1; | |
3436 if(rc == ETIMEDOUT) | |
3437 return -1; | |
3438 return 0; | |
3439 } | |
3440 | |
3441 /* | |
3442 * Closes a semaphore created by dw_event_new(). | |
3443 * Parameters: | |
3444 * eve: The handle to the event returned by dw_event_new(). | |
3445 */ | |
3446 int dw_event_close(HEV *eve) | |
3447 { | |
3448 if(!eve || !(*eve)) | |
3449 return FALSE; | |
3450 | |
3451 pthread_mutex_lock (&((*eve)->mutex)); | |
3452 pthread_cond_destroy (&((*eve)->event)); | |
3453 pthread_mutex_unlock (&((*eve)->mutex)); | |
3454 pthread_mutex_destroy (&((*eve)->mutex)); | |
3455 free(*eve); | |
3456 *eve = NULL; | |
3457 | |
3458 return TRUE; | |
3459 } | |
3460 | |
3461 /* | |
3462 * Creates a new thread with a starting point of func. | |
3463 * Parameters: | |
3464 * func: Function which will be run in the new thread. | |
3465 * data: Parameter(s) passed to the function. | |
3466 * stack: Stack size of new thread (OS/2 and Windows only). | |
3467 */ | |
3468 DWTID dw_thread_new(void *func, void *data, int stack) | |
3469 { | |
3470 DWTID gtkthread; | |
3471 | |
3472 pthread_create(>kthread, NULL, func, data); | |
3473 return gtkthread; | |
3474 } | |
3475 | |
3476 /* | |
3477 * Ends execution of current thread immediately. | |
3478 */ | |
3479 void dw_thread_end(void) | |
3480 { | |
3481 pthread_exit(NULL); | |
3482 } | |
3483 | |
3484 /* | |
3485 * Cleanly terminates a DW session, should be signal handler safe. | |
3486 * Parameters: | |
3487 * exitcode: Exit code reported to the operating system. | |
3488 */ | |
3489 void dw_exit(int exitcode) | |
3490 { | |
3491 exit(exitcode); | |
3492 } | |
3493 | |
3494 /* | |
3495 * Pack windows (widgets) into a box from the end (or bottom). | |
3496 * Parameters: | |
3497 * box: Window handle of the box to be packed into. | |
3498 * item: Window handle of the item to be back. | |
3499 * width: Width in pixels of the item or -1 to be self determined. | |
3500 * height: Height in pixels of the item or -1 to be self determined. | |
3501 * hsize: TRUE if the window (widget) should expand horizontally to fill space given. | |
3502 * vsize: TRUE if the window (widget) should expand vertically to fill space given. | |
3503 * pad: Number of pixels of padding around the item. | |
3504 */ | |
3505 void dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) | |
3506 { | |
3507 int expand = (hsize == FALSE && vsize == FALSE) ? FALSE : TRUE; | |
3508 int _locked_by_me = FALSE; | |
3509 | |
3510 if(!box) | |
3511 return; | |
3512 | |
3513 DW_MUTEX_LOCK; | |
3514 | |
3515 if(!item) | |
3516 { | |
3517 item = gtk_label_new(""); | |
3518 gtk_widget_show(item); | |
3519 } | |
3520 | |
3521 if(GTK_IS_BOX(box)) | |
3522 { | |
3523 gtk_box_pack_end(GTK_BOX(box), item, expand, TRUE, pad); | |
3524 gtk_widget_set_usize(item, width, height); | |
3525 if(GTK_IS_RADIO_BUTTON(item)) | |
3526 { | |
3527 GSList *group; | |
3528 GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "group"); | |
3529 | |
3530 if(groupstart) | |
3531 { | |
3532 group = gtk_radio_button_group(GTK_RADIO_BUTTON(groupstart)); | |
3533 gtk_radio_button_set_group(GTK_RADIO_BUTTON(item), group); | |
3534 } | |
3535 else | |
3536 gtk_object_set_data(GTK_OBJECT(box), "group", (gpointer)item); | |
3537 } | |
3538 } | |
3539 else | |
3540 { | |
3541 GtkWidget *vbox = gtk_vbox_new(FALSE, 0); | |
3542 | |
3543 gtk_container_add(GTK_CONTAINER(box), vbox); | |
3544 gtk_box_pack_end(GTK_BOX(vbox), item, expand, TRUE, 0); | |
3545 gtk_widget_show(vbox); | |
3546 | |
3547 gtk_widget_set_usize(item, width, height); | |
3548 gtk_object_set_user_data(GTK_OBJECT(box), vbox); | |
3549 } | |
3550 DW_MUTEX_UNLOCK; | |
3551 } | |
3552 | |
3553 /* | |
3554 * Sets the size of a given window (widget). | |
3555 * Parameters: | |
3556 * handle: Window (widget) handle. | |
3557 * width: New width in pixels. | |
3558 * height: New height in pixels. | |
3559 */ | |
3560 void dw_window_set_usize(HWND handle, unsigned long width, unsigned long height) | |
3561 { | |
3562 int _locked_by_me = FALSE; | |
3563 | |
3564 DW_MUTEX_LOCK; | |
3565 if(GTK_IS_WINDOW(handle)) | |
3566 _size_allocate(GTK_WINDOW(handle)); | |
3567 #if 0 | |
3568 gtk_window_set_default_size(GTK_WINDOW(handle), width, height); | |
3569 else | |
3570 #endif | |
3571 gtk_widget_set_usize(handle, width, height); | |
3572 DW_MUTEX_UNLOCK; | |
3573 } | |
3574 | |
3575 /* | |
3576 * Returns the width of the screen. | |
3577 */ | |
3578 int dw_screen_width(void) | |
3579 { | |
3580 int retval; | |
3581 int _locked_by_me = FALSE; | |
3582 | |
3583 DW_MUTEX_LOCK; | |
3584 retval = gdk_screen_width(); | |
3585 DW_MUTEX_UNLOCK; | |
3586 return retval; | |
3587 } | |
3588 | |
3589 /* | |
3590 * Returns the height of the screen. | |
3591 */ | |
3592 int dw_screen_height(void) | |
3593 { | |
3594 int retval; | |
3595 int _locked_by_me = FALSE; | |
3596 | |
3597 DW_MUTEX_UNLOCK; | |
3598 retval = gdk_screen_height(); | |
3599 DW_MUTEX_UNLOCK; | |
3600 return retval; | |
3601 } | |
3602 | |
3603 /* This should return the current color depth */ | |
3604 unsigned long dw_color_depth(void) | |
3605 { | |
3606 int retval; | |
3607 int _locked_by_me = FALSE; | |
3608 | |
3609 DW_MUTEX_UNLOCK; | |
3610 retval = gdk_colormap_get_system_size(); | |
3611 DW_MUTEX_UNLOCK; | |
3612 return retval; | |
3613 } | |
3614 | |
3615 /* | |
3616 * Sets the position of a given window (widget). | |
3617 * Parameters: | |
3618 * handle: Window (widget) handle. | |
3619 * x: X location from the bottom left. | |
3620 * y: Y location from the bottom left. | |
3621 */ | |
3622 void dw_window_set_pos(HWND handle, unsigned long x, unsigned long y) | |
3623 { | |
3624 int _locked_by_me = FALSE; | |
3625 | |
3626 DW_MUTEX_LOCK; | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3627 if(handle && handle->window) |
3 | 3628 gdk_window_move(handle->window, x, y); |
3629 DW_MUTEX_UNLOCK; | |
3630 } | |
3631 | |
3632 /* | |
3633 * Sets the position and size of a given window (widget). | |
3634 * Parameters: | |
3635 * handle: Window (widget) handle. | |
3636 * x: X location from the bottom left. | |
3637 * y: Y location from the bottom left. | |
3638 * width: Width of the widget. | |
3639 * height: Height of the widget. | |
3640 */ | |
3641 void dw_window_set_pos_size(HWND handle, unsigned long x, unsigned long y, unsigned long width, unsigned long height) | |
3642 { | |
3643 int _locked_by_me = FALSE; | |
3644 | |
3645 DW_MUTEX_LOCK; | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3646 if(handle && GTK_IS_WINDOW(handle)) |
3 | 3647 { |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3648 int cx = (int)gtk_object_get_data(GTK_OBJECT(handle), "cx"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3649 int cy = (int)gtk_object_get_data(GTK_OBJECT(handle), "cy"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3650 |
3 | 3651 _size_allocate(GTK_WINDOW(handle)); |
15
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3652 |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3653 gtk_widget_set_uposition(handle, x, y); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3654 gtk_window_set_default_size(GTK_WINDOW(handle), width - cx, height - cy); |
3 | 3655 } |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3656 else if(handle && handle->window) |
3 | 3657 { |
3658 gdk_window_resize(handle->window, width, height); | |
3659 gdk_window_move(handle->window, x, y); | |
3660 } | |
3661 DW_MUTEX_UNLOCK; | |
3662 } | |
3663 | |
3664 /* | |
3665 * Gets the position and size of a given window (widget). | |
3666 * Parameters: | |
3667 * handle: Window (widget) handle. | |
3668 * x: X location from the bottom left. | |
3669 * y: Y location from the bottom left. | |
3670 * width: Width of the widget. | |
3671 * height: Height of the widget. | |
3672 */ | |
3673 void dw_window_get_pos_size(HWND handle, ULONG *x, ULONG *y, ULONG *width, ULONG *height) | |
3674 { | |
3675 int _locked_by_me = FALSE; | |
3676 gint gx, gy, gwidth, gheight, gdepth; | |
3677 | |
12
26e2130135b9
Many Win32 and GTK fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
7
diff
changeset
|
3678 if(handle && handle->window) |
3 | 3679 { |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3680 int cx, cy; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3681 |
3 | 3682 DW_MUTEX_LOCK; |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3683 |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3684 cx = (int)gtk_object_get_data(GTK_OBJECT(handle), "cx"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3685 cy = (int)gtk_object_get_data(GTK_OBJECT(handle), "cy"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3686 |
3 | 3687 gdk_window_get_geometry(handle->window, &gx, &gy, &gwidth, &gheight, &gdepth); |
3688 gdk_window_get_root_origin(handle->window, &gx, &gy); | |
3689 if(x) | |
3690 *x = gx; | |
3691 if(y) | |
3692 *y = gy; | |
3693 if(width) | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3694 *width = gwidth - cx; |
3 | 3695 if(height) |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3696 *height = gheight - cy; |
3 | 3697 DW_MUTEX_UNLOCK; |
3698 } | |
3699 } | |
3700 | |
3701 /* | |
3702 * Sets the style of a given window (widget). | |
3703 * Parameters: | |
3704 * handle: Window (widget) handle. | |
3705 * width: New width in pixels. | |
3706 * height: New height in pixels. | |
3707 */ | |
3708 void dw_window_set_style(HWND handle, unsigned long style, unsigned long mask) | |
3709 { | |
3710 GtkWidget *handle2 = handle; | |
3711 int _locked_by_me = FALSE; | |
3712 | |
3713 DW_MUTEX_LOCK; | |
3714 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
3715 { | |
3716 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
3717 if(tmp) | |
3718 handle2 = tmp; | |
3719 } | |
3720 if(GTK_IS_CLIST(handle2)) | |
3721 { | |
3722 if(style & DW_CCS_EXTENDSEL) | |
3723 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_MULTIPLE); | |
3724 if(style & DW_CCS_SINGLESEL) | |
3725 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_SINGLE); | |
3726 } | |
3727 DW_MUTEX_UNLOCK; | |
3728 } | |
3729 | |
3730 /* | |
3731 * Adds a new page to specified notebook. | |
3732 * Parameters: | |
3733 * handle: Window (widget) handle. | |
3734 * flags: Any additional page creation flags. | |
3735 * front: If TRUE page is added at the beginning. | |
3736 */ | |
3737 unsigned long dw_notebook_page_new(HWND handle, unsigned long flags, int front) | |
3738 { | |
3739 int z; | |
3740 int _locked_by_me = FALSE; | |
3741 | |
3742 DW_MUTEX_LOCK; | |
3743 for(z=0;z<256;z++) | |
15
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3744 { |
3 | 3745 if(!gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), z)) |
3746 { | |
3747 DW_MUTEX_UNLOCK; | |
3748 return z; | |
3749 } | |
15
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3750 } |
3 | 3751 |
3752 DW_MUTEX_UNLOCK; | |
3753 | |
3754 /* Hopefully this won't happen. */ | |
3755 return 256; | |
3756 } | |
3757 | |
3758 /* | |
3759 * Remove a page from a notebook. | |
3760 * Parameters: | |
3761 * handle: Handle to the notebook widget. | |
3762 * pageid: ID of the page to be destroyed. | |
3763 */ | |
3764 void dw_notebook_page_destroy(HWND handle, unsigned int pageid) | |
3765 { | |
3766 int _locked_by_me = FALSE; | |
3767 | |
3768 DW_MUTEX_LOCK; | |
3769 gtk_notebook_remove_page(GTK_NOTEBOOK(handle), pageid); | |
3770 DW_MUTEX_UNLOCK; | |
3771 } | |
3772 | |
3773 /* | |
3774 * Queries the currently visible page ID. | |
3775 * Parameters: | |
3776 * handle: Handle to the notebook widget. | |
3777 */ | |
3778 unsigned int dw_notebook_page_query(HWND handle) | |
3779 { | |
3780 int retval; | |
3781 int _locked_by_me = FALSE; | |
3782 | |
3783 DW_MUTEX_LOCK; | |
3784 retval = gtk_notebook_get_current_page(GTK_NOTEBOOK(handle)); | |
3785 DW_MUTEX_UNLOCK; | |
3786 return retval; | |
3787 } | |
3788 | |
3789 /* | |
3790 * Sets the currently visibale page ID. | |
3791 * Parameters: | |
3792 * handle: Handle to the notebook widget. | |
3793 * pageid: ID of the page to be made visible. | |
3794 */ | |
3795 void dw_notebook_page_set(HWND handle, unsigned int pageid) | |
3796 { | |
3797 int _locked_by_me = FALSE; | |
3798 | |
3799 DW_MUTEX_LOCK; | |
3800 gtk_notebook_set_page(GTK_NOTEBOOK(handle), pageid); | |
3801 DW_MUTEX_UNLOCK; | |
3802 } | |
3803 | |
3804 | |
3805 /* | |
3806 * Sets the text on the specified notebook tab. | |
3807 * Parameters: | |
3808 * handle: Notebook handle. | |
3809 * pageid: Page ID of the tab to set. | |
3810 * text: Pointer to the text to set. | |
3811 */ | |
3812 void dw_notebook_page_set_text(HWND handle, unsigned long pageid, char *text) | |
3813 { | |
3814 GtkWidget *child; | |
3815 int _locked_by_me = FALSE; | |
3816 | |
3817 DW_MUTEX_LOCK; | |
3818 child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), pageid); | |
3819 if(child) | |
3820 gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(handle), child, text); | |
3821 DW_MUTEX_UNLOCK; | |
3822 } | |
3823 | |
3824 /* | |
3825 * Sets the text on the specified notebook tab status area. | |
3826 * Parameters: | |
3827 * handle: Notebook handle. | |
3828 * pageid: Page ID of the tab to set. | |
3829 * text: Pointer to the text to set. | |
3830 */ | |
3831 void dw_notebook_page_set_status_text(HWND handle, unsigned long pageid, char *text) | |
3832 { | |
3833 /* TODO (if possible) */ | |
3834 } | |
3835 | |
3836 /* | |
3837 * Packs the specified box into the notebook page. | |
3838 * Parameters: | |
3839 * handle: Handle to the notebook to be packed. | |
3840 * pageid: Page ID in the notebook which is being packed. | |
3841 * page: Box handle to be packed. | |
3842 */ | |
3843 void dw_notebook_pack(HWND handle, unsigned long pageid, HWND page) | |
3844 { | |
15
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3845 GtkWidget *label, *child, *oldlabel; |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3846 gchar *text = NULL; |
3 | 3847 int _locked_by_me = FALSE; |
3848 | |
3849 DW_MUTEX_LOCK; | |
15
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3850 child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(handle), pageid); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3851 if(child) |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3852 { |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3853 oldlabel = gtk_notebook_get_tab_label(GTK_NOTEBOOK(handle), child); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3854 if(oldlabel) |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3855 gtk_label_get(GTK_LABEL(oldlabel), &text); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3856 } |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3857 |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3858 label = gtk_label_new(text ? text : ""); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3859 |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3860 gtk_notebook_insert_page(GTK_NOTEBOOK(handle), page, label, pageid); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3861 if(child) |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
3862 gtk_notebook_remove_page(GTK_NOTEBOOK(handle), pageid+1); |
3 | 3863 DW_MUTEX_UNLOCK; |
3864 } | |
3865 | |
3866 /* | |
3867 * Appends the specified text to the listbox's (or combobox) entry list. | |
3868 * Parameters: | |
3869 * handle: Handle to the listbox to be appended to. | |
3870 * text: Text to append into listbox. | |
3871 */ | |
3872 void dw_listbox_append(HWND handle, char *text) | |
3873 { | |
3874 GtkWidget *handle2 = handle; | |
3875 int _locked_by_me = FALSE; | |
3876 | |
3877 DW_MUTEX_LOCK; | |
3878 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
3879 { | |
3880 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
3881 if(tmp) | |
3882 handle2 = tmp; | |
3883 } | |
3884 if(GTK_IS_LIST(handle2)) | |
3885 { | |
3886 GtkWidget *list_item; | |
3887 GList *tmp; | |
3888 char *font = (char *)gtk_object_get_data(GTK_OBJECT(handle), "font"); | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3889 GdkColor *fore = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "foregdk"); |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3890 GdkColor *back = (GdkColor *)gtk_object_get_data(GTK_OBJECT(handle2), "backgdk"); |
3 | 3891 |
3892 list_item=gtk_list_item_new_with_label(text); | |
3893 | |
3894 if(font) | |
3895 _set_font(GTK_LIST_ITEM(list_item)->item.bin.child, font); | |
3896 if(fore && back) | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3897 _set_color(GTK_LIST_ITEM(list_item)->item.bin.child, |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3898 DW_RGB(fore->red, fore->green, fore->blue), |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
3899 DW_RGB(back->red, back->green, back->blue)); |
3 | 3900 |
3901 tmp = g_list_append(NULL, list_item); | |
3902 gtk_widget_show(list_item); | |
3903 gtk_list_append_items(GTK_LIST(handle2),tmp); | |
3904 } | |
3905 else if(GTK_IS_COMBO(handle2)) | |
3906 { | |
3907 GList *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); | |
3908 char *addtext = strdup(text); | |
3909 | |
3910 if(addtext) | |
3911 { | |
3912 tmp = g_list_append(tmp, addtext); | |
3913 gtk_object_set_user_data(GTK_OBJECT(handle2), tmp); | |
3914 gtk_combo_set_popdown_strings(GTK_COMBO(handle2), tmp); | |
3915 } | |
3916 } | |
3917 DW_MUTEX_UNLOCK; | |
3918 } | |
3919 | |
3920 /* | |
3921 * Clears the listbox's (or combobox) list of all entries. | |
3922 * Parameters: | |
3923 * handle: Handle to the listbox to be cleared. | |
3924 */ | |
3925 void dw_listbox_clear(HWND handle) | |
3926 { | |
3927 GtkWidget *handle2 = handle; | |
3928 int _locked_by_me = FALSE; | |
3929 | |
3930 DW_MUTEX_LOCK; | |
3931 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
3932 { | |
3933 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
3934 if(tmp) | |
3935 handle2 = tmp; | |
3936 } | |
3937 if(GTK_IS_COMBO(handle2)) | |
3938 { | |
3939 GList *list, *tmp = (GList *)gtk_object_get_user_data(GTK_OBJECT(handle2)); | |
3940 | |
3941 if(tmp) | |
3942 { | |
3943 list = tmp; | |
3944 while(list) | |
3945 { | |
3946 if(list->data) | |
3947 free(list->data); | |
3948 list=list->next; | |
3949 } | |
3950 g_list_free(tmp); | |
3951 } | |
3952 gtk_object_set_user_data(GTK_OBJECT(handle2), NULL); | |
3953 } | |
3954 else if(GTK_IS_LIST(handle2)) | |
3955 { | |
3956 int count = dw_listbox_count(handle); | |
3957 | |
3958 gtk_list_clear_items(GTK_LIST(handle2), 0, count - 1); | |
3959 } | |
3960 DW_MUTEX_UNLOCK; | |
3961 } | |
3962 | |
3963 /* | |
3964 * Returns the listbox's item count. | |
3965 * Parameters: | |
3966 * handle: Handle to the listbox to be counted | |
3967 */ | |
3968 int dw_listbox_count(HWND handle) | |
3969 { | |
3970 GtkWidget *handle2 = handle; | |
3971 int retval = 0; | |
3972 int _locked_by_me = FALSE; | |
3973 | |
3974 DW_MUTEX_LOCK; | |
3975 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
3976 { | |
3977 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
3978 if(tmp) | |
3979 handle2 = tmp; | |
3980 } | |
3981 else if(GTK_IS_COMBO(handle)) | |
3982 { | |
3983 handle2 = GTK_COMBO(handle)->list; | |
3984 } | |
3985 if(GTK_IS_LIST(handle2)) | |
3986 { | |
3987 GList *list = GTK_LIST(handle2)->children; | |
3988 while(list) | |
3989 { | |
3990 list = list->next; | |
3991 retval++; | |
3992 } | |
3993 } | |
3994 DW_MUTEX_UNLOCK; | |
3995 return retval; | |
3996 } | |
3997 | |
3998 /* | |
3999 * Sets the topmost item in the viewport. | |
4000 * Parameters: | |
4001 * handle: Handle to the listbox to be cleared. | |
4002 * top: Index to the top item. | |
4003 */ | |
4004 void dw_listbox_set_top(HWND handle, int top) | |
4005 { | |
4006 GtkWidget *handle2 = handle; | |
4007 int _locked_by_me = FALSE; | |
4008 | |
4009 DW_MUTEX_LOCK; | |
4010 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
4011 { | |
4012 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
4013 if(tmp) | |
4014 handle2 = tmp; | |
4015 } | |
4016 if(GTK_IS_LIST(handle2)) | |
4017 { | |
4018 int count = dw_listbox_count(handle); | |
4019 GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(handle)); | |
4020 float pos, ratio; | |
4021 | |
4022 if(count) | |
4023 { | |
4024 ratio = (float)top/(float)count; | |
4025 | |
4026 pos = (ratio * (float)(adj->upper - adj->lower)) + adj->lower; | |
4027 | |
4028 gtk_adjustment_set_value(adj, pos); | |
4029 } | |
4030 } | |
4031 DW_MUTEX_UNLOCK; | |
4032 } | |
4033 | |
4034 /* | |
4035 * Copies the given index item's text into buffer. | |
4036 * Parameters: | |
4037 * handle: Handle to the listbox to be queried. | |
4038 * index: Index into the list to be queried. | |
4039 * buffer: Buffer where text will be copied. | |
4040 * length: Length of the buffer (including NULL). | |
4041 */ | |
4042 void dw_listbox_query_text(HWND handle, unsigned int index, char *buffer, unsigned int length) | |
4043 { | |
4044 GtkWidget *handle2 = handle; | |
4045 int _locked_by_me = FALSE; | |
4046 | |
4047 DW_MUTEX_LOCK; | |
4048 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
4049 { | |
4050 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
4051 if(tmp) | |
4052 handle2 = tmp; | |
4053 } | |
4054 else if(GTK_IS_COMBO(handle)) | |
4055 { | |
4056 handle2 = GTK_COMBO(handle)->list; | |
4057 } | |
4058 if(GTK_IS_LIST(handle2)) | |
4059 { | |
4060 int counter = 0; | |
4061 GList *list = GTK_LIST(handle2)->children; | |
4062 | |
4063 while(list) | |
4064 { | |
4065 if(counter == index) | |
4066 { | |
4067 gchar *text = ""; | |
4068 | |
4069 if(GTK_IS_LIST_ITEM(list->data)) | |
4070 { | |
4071 GtkListItem *li = GTK_LIST_ITEM(list->data); | |
4072 | |
4073 if(GTK_IS_ITEM(&(li->item))) | |
4074 { | |
4075 GtkItem *i = &(li->item); | |
4076 | |
4077 if(GTK_IS_BIN(&(i->bin))) | |
4078 { | |
4079 GtkBin *b = &(i->bin); | |
4080 | |
4081 if(GTK_IS_LABEL(b->child)) | |
4082 gtk_label_get(GTK_LABEL(b->child), &text); | |
4083 } | |
4084 } | |
4085 } | |
4086 else if(GTK_IS_COMBO(handle) && list->data) | |
4087 text = (gchar *)list->data; | |
4088 | |
4089 strncpy(buffer, (char *)text, length); | |
4090 break; | |
4091 } | |
4092 list = list->next; | |
4093 counter++; | |
4094 } | |
4095 } | |
4096 DW_MUTEX_UNLOCK; | |
4097 } | |
4098 | |
4099 /* | |
4100 * Sets the text of a given listbox entry. | |
4101 * Parameters: | |
4102 * handle: Handle to the listbox to be queried. | |
4103 * index: Index into the list to be queried. | |
4104 * buffer: Buffer where text will be copied. | |
4105 */ | |
4106 void dw_listbox_set_text(HWND handle, unsigned int index, char *buffer) | |
4107 { | |
4108 GtkWidget *handle2 = handle; | |
4109 int _locked_by_me = FALSE; | |
4110 | |
4111 DW_MUTEX_LOCK; | |
4112 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
4113 { | |
4114 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
4115 if(tmp) | |
4116 handle2 = tmp; | |
4117 } | |
4118 else if(GTK_IS_COMBO(handle)) | |
4119 { | |
4120 handle2 = GTK_COMBO(handle)->list; | |
4121 } | |
4122 if(GTK_IS_LIST(handle2)) | |
4123 { | |
4124 int counter = 0; | |
4125 GList *list = GTK_LIST(handle2)->children; | |
4126 | |
4127 while(list) | |
4128 { | |
4129 if(counter == index) | |
4130 { | |
4131 | |
4132 if(GTK_IS_LIST_ITEM(list->data)) | |
4133 { | |
4134 GtkListItem *li = GTK_LIST_ITEM(list->data); | |
4135 | |
4136 if(GTK_IS_ITEM(&(li->item))) | |
4137 { | |
4138 GtkItem *i = &(li->item); | |
4139 | |
4140 if(GTK_IS_BIN(&(i->bin))) | |
4141 { | |
4142 GtkBin *b = &(i->bin); | |
4143 | |
4144 if(GTK_IS_LABEL(b->child)) | |
4145 gtk_label_set_text(GTK_LABEL(b->child), buffer); | |
4146 } | |
4147 } | |
4148 } | |
4149 else if(GTK_IS_COMBO(handle)) | |
4150 { | |
4151 if(list->data) | |
4152 g_free(list->data); | |
4153 list->data = g_strdup(buffer); | |
4154 } | |
4155 break; | |
4156 } | |
4157 list = list->next; | |
4158 counter++; | |
4159 } | |
4160 } | |
4161 DW_MUTEX_UNLOCK; | |
4162 } | |
4163 | |
4164 /* | |
4165 * Returns the index to the item in the list currently selected. | |
4166 * Parameters: | |
4167 * handle: Handle to the listbox to be queried. | |
4168 */ | |
4169 unsigned int dw_listbox_selected(HWND handle) | |
4170 { | |
4171 GtkWidget *handle2 = handle; | |
4172 int retval = DW_LIT_NONE; | |
4173 int _locked_by_me = FALSE; | |
4174 | |
4175 DW_MUTEX_LOCK; | |
4176 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
4177 { | |
4178 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
4179 if(tmp) | |
4180 handle2 = tmp; | |
4181 } | |
4182 else if(GTK_IS_COMBO(handle)) | |
4183 { | |
4184 retval = (unsigned int)gtk_object_get_data(GTK_OBJECT(handle), "item"); | |
4185 DW_MUTEX_UNLOCK; | |
4186 return retval; | |
4187 } | |
4188 if(GTK_IS_LIST(handle2)) | |
4189 { | |
4190 int counter = 0; | |
4191 GList *list = GTK_LIST(handle2)->children; | |
4192 while(list) | |
4193 { | |
19
3e5bff3e55ff
Fixed a problem in dw_listbox_selected().
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
17
diff
changeset
|
4194 if(list->data == GTK_LIST(handle2)->selection->data) |
3 | 4195 { |
4196 retval = counter; | |
4197 break; | |
4198 } | |
4199 | |
4200 list = list->next; | |
4201 counter++; | |
4202 } | |
4203 } | |
4204 DW_MUTEX_UNLOCK; | |
4205 return retval; | |
4206 } | |
4207 | |
4208 /* | |
4209 * Sets the selection state of a given index. | |
4210 * Parameters: | |
4211 * handle: Handle to the listbox to be set. | |
4212 * index: Item index. | |
4213 * state: TRUE if selected FALSE if unselected. | |
4214 */ | |
4215 void dw_listbox_select(HWND handle, int index, int state) | |
4216 { | |
4217 GtkWidget *handle2 = handle; | |
4218 int _locked_by_me = FALSE; | |
4219 | |
4220 DW_MUTEX_LOCK; | |
4221 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
4222 { | |
4223 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
4224 if(tmp) | |
4225 handle2 = tmp; | |
4226 } | |
4227 else if(GTK_IS_COMBO(handle)) | |
4228 { | |
4229 handle2 = GTK_COMBO(handle)->list; | |
4230 } | |
4231 if(GTK_IS_LIST(handle2)) | |
4232 { | |
4233 if(state) | |
4234 gtk_list_select_item(GTK_LIST(handle2), index); | |
4235 else | |
4236 gtk_list_unselect_item(GTK_LIST(handle2), index); | |
4237 } | |
4238 DW_MUTEX_UNLOCK; | |
4239 } | |
4240 | |
4241 /* | |
4242 * Deletes the item with given index from the list. | |
4243 * Parameters: | |
4244 * handle: Handle to the listbox to be set. | |
4245 * index: Item index. | |
4246 */ | |
4247 void dw_listbox_delete(HWND handle, int index) | |
4248 { | |
4249 GtkWidget *handle2 = handle; | |
4250 int _locked_by_me = FALSE; | |
4251 | |
4252 DW_MUTEX_LOCK; | |
4253 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
4254 { | |
4255 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
4256 if(tmp) | |
4257 handle2 = tmp; | |
4258 } | |
4259 else if(GTK_IS_COMBO(handle)) | |
4260 { | |
4261 handle2 = GTK_COMBO(handle)->list; | |
4262 } | |
4263 if(GTK_IS_LIST(handle2)) | |
4264 gtk_list_clear_items(GTK_LIST(handle2), index, index); | |
4265 DW_MUTEX_UNLOCK; | |
4266 } | |
4267 | |
4268 | |
4269 /* | |
4270 * Pack a splitbar (sizer) into the specified box from the start. | |
4271 * Parameters: | |
4272 * box: Window handle of the box to be packed into. | |
4273 */ | |
4274 void dw_box_pack_splitbar_start(HWND box) | |
4275 { | |
4276 /* TODO */ | |
4277 } | |
4278 | |
4279 /* | |
4280 * Pack a splitbar (sizer) into the specified box from the end. | |
4281 * Parameters: | |
4282 * box: Window handle of the box to be packed into. | |
4283 */ | |
4284 void dw_box_pack_splitbar_end(HWND box) | |
4285 { | |
4286 /* TODO */ | |
4287 } | |
4288 | |
4289 /* | |
4290 * Pack windows (widgets) into a box from the start (or top). | |
4291 * Parameters: | |
4292 * box: Window handle of the box to be packed into. | |
4293 * item: Window handle of the item to be back. | |
4294 * width: Width in pixels of the item or -1 to be self determined. | |
4295 * height: Height in pixels of the item or -1 to be self determined. | |
4296 * hsize: TRUE if the window (widget) should expand horizontally to fill space given. | |
4297 * vsize: TRUE if the window (widget) should expand vertically to fill space given. | |
4298 * pad: Number of pixels of padding around the item. | |
4299 */ | |
4300 void dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad) | |
4301 { | |
4302 int expand = (hsize == FALSE && vsize == FALSE) ? FALSE : TRUE; | |
4303 int _locked_by_me = FALSE; | |
4304 | |
4305 if(!box) | |
4306 return; | |
4307 | |
4308 DW_MUTEX_LOCK; | |
4309 | |
4310 if(!item) | |
4311 { | |
4312 item = gtk_label_new(""); | |
4313 gtk_widget_show(item); | |
4314 } | |
4315 | |
4316 if(GTK_IS_BOX(box)) | |
4317 { | |
4318 gtk_box_pack_start(GTK_BOX(box), item, expand, TRUE, pad); | |
4319 gtk_widget_set_usize(item, width, height); | |
4320 if(GTK_IS_RADIO_BUTTON(item)) | |
4321 { | |
4322 GSList *group; | |
4323 GtkWidget *groupstart = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(box), "group"); | |
4324 | |
4325 if(groupstart) | |
4326 { | |
4327 group = gtk_radio_button_group(GTK_RADIO_BUTTON(groupstart)); | |
4328 gtk_radio_button_set_group(GTK_RADIO_BUTTON(item), group); | |
4329 } | |
4330 else | |
4331 gtk_object_set_data(GTK_OBJECT(box), "group", (gpointer)item); | |
4332 } | |
4333 } | |
4334 else | |
4335 { | |
4336 GtkWidget *vbox = gtk_vbox_new(FALSE, 0); | |
4337 | |
4338 gtk_container_add(GTK_CONTAINER(box), vbox); | |
4339 gtk_box_pack_end(GTK_BOX(vbox), item, expand, TRUE, 0); | |
4340 gtk_widget_show(vbox); | |
4341 | |
4342 gtk_widget_set_usize(item, width, height); | |
4343 gtk_object_set_user_data(GTK_OBJECT(box), vbox); | |
4344 } | |
4345 DW_MUTEX_UNLOCK; | |
4346 } | |
4347 | |
4348 /* | |
4349 * Returns some information about the current operating environment. | |
4350 * Parameters: | |
4351 * env: Pointer to a DWEnv struct. | |
4352 */ | |
4353 void dw_environment_query(DWEnv *env) | |
4354 { | |
4355 struct utsname name; | |
4356 char tempbuf[100]; | |
4357 int len, z; | |
4358 | |
4359 uname(&name); | |
4360 strcpy(env->osName, name.sysname); | |
4361 strcpy(tempbuf, name.release); | |
4362 | |
4363 env->MajorBuild = env->MinorBuild = 0; | |
4364 | |
4365 len = strlen(tempbuf); | |
4366 | |
15
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
4367 strcpy(env->buildDate, __DATE__); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
4368 strcpy(env->buildTime, __TIME__); |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
4369 env->DWMajorVersion = DW_MAJOR_VERSION; |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
4370 env->DWMinorVersion = DW_MINOR_VERSION; |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
4371 env->DWSubVersion = DW_SUB_VERSION; |
81833f25b1aa
Added new Dynamic Windows build information to the DWEnv struct.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
14
diff
changeset
|
4372 |
3 | 4373 for(z=1;z<len;z++) |
4374 { | |
4375 if(tempbuf[z] == '.') | |
4376 { | |
4377 tempbuf[z] = '\0'; | |
4378 env->MajorVersion = atoi(&tempbuf[z-1]); | |
4379 env->MinorVersion = atoi(&tempbuf[z+1]); | |
4380 return; | |
4381 } | |
4382 } | |
4383 env->MajorVersion = atoi(tempbuf); | |
4384 env->MinorVersion = 0; | |
4385 } | |
4386 | |
4387 /* Internal function to handle the file OK press */ | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4388 void _gtk_file_ok(GtkWidget *widget, DWDialog *dwwait) |
3 | 4389 { |
4390 char *tmp; | |
4391 | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4392 if(!dwwait) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4393 return; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4394 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4395 tmp = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dwwait->data)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4396 gtk_widget_destroy(GTK_WIDGET(dwwait->data)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4397 _dw_file_active = 0; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4398 dw_dialog_dismiss(dwwait, (void *)(tmp ? strdup(tmp) : NULL)); |
3 | 4399 } |
4400 | |
4401 /* Internal function to handle the file Cancel press */ | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4402 void _gtk_file_cancel(GtkWidget *widget, DWDialog *dwwait) |
3 | 4403 { |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4404 if(!dwwait) |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4405 return; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4406 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4407 gtk_widget_destroy(GTK_WIDGET(dwwait->data)); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4408 _dw_file_active = 0; |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4409 dw_dialog_dismiss(dwwait, NULL); |
3 | 4410 } |
4411 | |
4412 /* | |
4413 * Opens a file dialog and queries user selection. | |
4414 * Parameters: | |
4415 * title: Title bar text for dialog. | |
4416 * defpath: The default path of the open dialog. | |
4417 * ext: Default file extention. | |
4418 * flags: DW_FILE_OPEN or DW_FILE_SAVE. | |
4419 * Returns: | |
4420 * NULL on error. A malloced buffer containing | |
4421 * the file path on success. | |
4422 * | |
4423 */ | |
4424 char *dw_file_browse(char *title, char *defpath, char *ext, int flags) | |
4425 { | |
4426 GtkWidget *filew; | |
4427 int _locked_by_me = FALSE; | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4428 DWDialog *dwwait; |
3 | 4429 |
4430 DW_MUTEX_LOCK; | |
4431 | |
4432 /* The DW mutex should be sufficient for | |
4433 * insuring no thread changes this unknowingly. | |
4434 */ | |
4435 if(_dw_file_active) | |
4436 { | |
4437 DW_MUTEX_UNLOCK; | |
4438 return NULL; | |
4439 } | |
4440 | |
4441 _dw_file_active = 1; | |
4442 | |
4443 filew = gtk_file_selection_new(title); | |
4444 | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4445 dwwait = dw_dialog_new((void *)filew); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4446 |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4447 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->ok_button), "clicked", (GtkSignalFunc) _gtk_file_ok, dwwait); |
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4448 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filew)->cancel_button), "clicked", (GtkSignalFunc) _gtk_file_cancel, dwwait); |
3 | 4449 |
4450 if(defpath) | |
4451 gtk_file_selection_set_filename(GTK_FILE_SELECTION(filew), defpath); | |
4452 | |
4453 gtk_widget_show(filew); | |
4454 | |
4455 DW_MUTEX_UNLOCK; | |
4456 | |
22
6a246b3bb14f
Added tree widgets, fixed some delete event processing, fixed a layout bug
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
19
diff
changeset
|
4457 return (char *)dw_dialog_wait(dwwait); |
3 | 4458 } |
4459 | |
4460 | |
4461 /* | |
4462 * Execute and external program in a seperate session. | |
4463 * Parameters: | |
4464 * program: Program name with optional path. | |
4465 * type: Either DW_EXEC_CON or DW_EXEC_GUI. | |
4466 * params: An array of pointers to string arguements. | |
4467 * Returns: | |
4468 * -1 on error. | |
4469 */ | |
4470 int dw_exec(char *program, int type, char **params) | |
4471 { | |
4472 int ret = -1; | |
4473 | |
4474 if((ret = fork()) == 0) | |
4475 { | |
4476 int i; | |
4477 | |
4478 for (i = 3; i < 256; i++) | |
4479 close(i); | |
4480 setsid(); | |
4481 if(type == DW_EXEC_GUI) | |
4482 { | |
4483 execvp(program, params); | |
4484 } | |
4485 else if(type == DW_EXEC_CON) | |
4486 { | |
4487 char **tmpargs; | |
4488 | |
4489 if(!params) | |
4490 { | |
4491 tmpargs = malloc(sizeof(char *)); | |
4492 tmpargs[0] = NULL; | |
4493 } | |
4494 else | |
4495 { | |
4496 int z = 0; | |
4497 | |
4498 while(params[z]) | |
4499 { | |
4500 z++; | |
4501 } | |
4502 tmpargs = malloc(sizeof(char *)*(z+3)); | |
4503 z=0; | |
4504 tmpargs[0] = "xterm"; | |
4505 tmpargs[1] = "-e"; | |
4506 while(params[z]) | |
4507 { | |
4508 tmpargs[z+2] = params[z]; | |
4509 z++; | |
4510 } | |
4511 tmpargs[z+2] = NULL; | |
4512 } | |
4513 execvp("xterm", tmpargs); | |
4514 free(tmpargs); | |
4515 } | |
4516 /* If we got here exec failed */ | |
4517 _exit(-1); | |
4518 } | |
4519 return ret; | |
4520 } | |
4521 | |
4522 /* | |
4523 * Loads a web browser pointed at the given URL. | |
4524 * Parameters: | |
4525 * url: Uniform resource locator. | |
4526 */ | |
4527 int dw_browse(char *url) | |
4528 { | |
4529 /* Is there a way to find the webbrowser in Unix? */ | |
4530 char *execargs[3], *browser = "netscape"; | |
4531 | |
4532 execargs[0] = browser; | |
4533 execargs[1] = url; | |
4534 execargs[2] = NULL; | |
4535 | |
4536 return dw_exec(browser, DW_EXEC_GUI, execargs); | |
4537 } | |
4538 | |
4539 /* | |
4540 * Returns a pointer to a static buffer which containes the | |
4541 * current user directory. Or the root directory (C:\ on | |
4542 * OS/2 and Windows). | |
4543 */ | |
4544 char *dw_user_dir(void) | |
4545 { | |
4546 static char _user_dir[1024] = ""; | |
4547 | |
4548 if(!_user_dir[0]) | |
4549 { | |
4550 char *home = getenv("HOME"); | |
4551 | |
4552 if(home) | |
4553 strcpy(_user_dir, home); | |
4554 else | |
4555 strcpy(_user_dir, "/"); | |
4556 } | |
4557 return _user_dir; | |
4558 } | |
4559 | |
4560 /* | |
4561 * Call a function from the window (widget)'s context. | |
4562 * Parameters: | |
4563 * handle: Window handle of the widget. | |
4564 * function: Function pointer to be called. | |
4565 * data: Pointer to the data to be passed to the function. | |
4566 */ | |
4567 void dw_window_function(HWND handle, void *function, void *data) | |
4568 { | |
4569 /* TODO */ | |
4570 } | |
4571 | |
4572 #ifndef NO_SIGNALS | |
4573 /* | |
4574 * Add a callback to a window event. | |
4575 * Parameters: | |
4576 * window: Window handle of signal to be called back. | |
4577 * signame: A string pointer identifying which signal to be hooked. | |
4578 * sigfunc: The pointer to the function to be used as the callback. | |
4579 * data: User data to be passed to the handler function. | |
4580 */ | |
4581 void dw_signal_connect(HWND window, char *signame, void *sigfunc, void *data) | |
4582 { | |
4583 SignalHandler *work = malloc(sizeof(SignalHandler)); | |
4584 void *thisfunc = _findsigfunc(signame); | |
4585 char *thisname = signame; | |
4586 HWND thiswindow = window; | |
4587 int _locked_by_me = FALSE; | |
4588 | |
4589 DW_MUTEX_LOCK; | |
4590 if(GTK_IS_SCROLLED_WINDOW(thiswindow)) | |
4591 { | |
4592 thiswindow = (HWND)gtk_object_get_user_data(GTK_OBJECT(window)); | |
4593 } | |
4594 | |
4595 if(GTK_IS_MENU_ITEM(thiswindow) && strcmp(signame, "clicked") == 0) | |
4596 { | |
4597 thisname = "activate"; | |
4598 thisfunc = _findsigfunc(thisname); | |
4599 } | |
4600 else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, "container-context") == 0) | |
4601 { | |
4602 thisname = "button_press_event"; | |
4603 thisfunc = _findsigfunc("container-context"); | |
4604 } | |
4605 else if(GTK_IS_CLIST(thiswindow) && strcmp(signame, "container-select") == 0) | |
4606 { | |
4607 thisname = "button_press_event"; | |
4608 thisfunc = _findsigfunc("container-select"); | |
4609 } | |
4610 else if(GTK_IS_COMBO(thiswindow) && strcmp(signame, "item-select") == 0) | |
4611 { | |
4612 thisname = "select_child"; | |
4613 thiswindow = GTK_COMBO(thiswindow)->list; | |
4614 } | |
4615 else if(GTK_IS_LIST(thiswindow) && strcmp(signame, "item-select") == 0) | |
4616 { | |
4617 thisname = "select_child"; | |
4618 } | |
14
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
4619 else if(GTK_IS_WINDOW(thiswindow) && strcmp(signame, "set-focus") == 0) |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
4620 { |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
4621 thisname = "focus-in-event"; |
176cee043f1b
Lots of Windows and Unix bug fixes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
12
diff
changeset
|
4622 } |
3 | 4623 |
4624 if(!thisfunc || !thiswindow) | |
4625 { | |
4626 free(work); | |
4627 DW_MUTEX_UNLOCK; | |
4628 return; | |
4629 } | |
4630 | |
4631 work->window = window; | |
4632 work->data = data; | |
4633 work->func = sigfunc; | |
4634 | |
4635 gtk_signal_connect(GTK_OBJECT(thiswindow), thisname, GTK_SIGNAL_FUNC(thisfunc), work); | |
4636 DW_MUTEX_UNLOCK; | |
4637 } | |
4638 | |
4639 /* | |
4640 * Removes callbacks for a given window with given name. | |
4641 * Parameters: | |
4642 * window: Window handle of callback to be removed. | |
4643 */ | |
4644 void dw_signal_disconnect_by_name(HWND window, char *signame) | |
4645 { | |
4646 #if 0 | |
4647 gtk_signal_disconnect_by_name(window, signame); | |
4648 #endif | |
4649 } | |
4650 | |
4651 /* | |
4652 * Removes all callbacks for a given window. | |
4653 * Parameters: | |
4654 * window: Window handle of callback to be removed. | |
4655 */ | |
4656 void dw_signal_disconnect_by_window(HWND window) | |
4657 { | |
4658 #if 0 | |
4659 gtk_signal_disconnect_by_window(window); | |
4660 #endif | |
4661 } | |
4662 | |
4663 /* | |
4664 * Removes all callbacks for a given window with specified data. | |
4665 * Parameters: | |
4666 * window: Window handle of callback to be removed. | |
4667 * data: Pointer to the data to be compared against. | |
4668 */ | |
4669 void dw_signal_disconnect_by_data(HWND window, void *data) | |
4670 { | |
4671 dw_signal_disconnect_by_data(window, data); | |
4672 } | |
4673 #endif | |
4674 | |
4675 #ifdef TEST | |
4676 HWND mainwindow, | |
4677 listbox, | |
4678 okbutton, | |
4679 cancelbutton, | |
4680 lbbox, | |
4681 stext, | |
4682 buttonbox, | |
4683 testwindow, | |
4684 testbox, | |
4685 testok, | |
4686 testcancel, | |
4687 testbox2, | |
4688 testok2, | |
4689 testcancel2, | |
4690 notebook; | |
4691 int count = 2; | |
4692 | |
4693 int test_callback(HWND window, void *data) | |
4694 { | |
4695 dw_window_destroy((HWND)data); | |
4696 /* Return -1 to allow the default handlers to return. */ | |
4697 count--; | |
4698 if(!count) | |
4699 exit(0); | |
4700 return -1; | |
4701 } | |
4702 | |
4703 /* | |
4704 * Let's demonstrate the functionality of this library. :) | |
4705 */ | |
4706 int main(void) | |
4707 { | |
4708 unsigned long flStyle = DW_FCF_SYSMENU | DW_FCF_TITLEBAR | | |
4709 DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER; | |
4710 int pageid; | |
4711 | |
4712 dw_init(TRUE); | |
4713 | |
4714 /* Try a little server dialog. :) */ | |
4715 mainwindow = dw_window_new(DW_DESKTOP, "Server", flStyle | DW_FCF_SIZEBORDER | DW_FCF_MINMAX); | |
4716 | |
4717 lbbox = dw_box_new(BOXVERT, 10); | |
4718 | |
4719 dw_box_pack_start(mainwindow, lbbox, 0, 0, TRUE, TRUE, 0); | |
4720 | |
4721 stext = dw_text_new("Choose a server:", 0); | |
4722 | |
4723 dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); | |
4724 | |
4725 dw_box_pack_start(lbbox, stext, 130, 15, FALSE, FALSE, 10); | |
4726 | |
4727 listbox = dw_listbox_new(100L, FALSE); | |
4728 | |
4729 dw_box_pack_start(lbbox, listbox, 130, 200, TRUE, TRUE, 10); | |
4730 | |
4731 buttonbox = dw_box_new(BOXHORZ, 0); | |
4732 | |
4733 dw_box_pack_start(lbbox, buttonbox, 0, 0, TRUE, TRUE, 0); | |
4734 | |
4735 okbutton = dw_button_new("Ok", 1001L); | |
4736 | |
4737 dw_box_pack_start(buttonbox, okbutton, 50, 30, TRUE, TRUE, 5); | |
4738 | |
4739 cancelbutton = dw_button_new("Cancel", 1002L); | |
4740 | |
4741 dw_box_pack_start(buttonbox, cancelbutton, 50, 30, TRUE, TRUE, 5); | |
4742 | |
4743 /* Set some nice fonts and colors */ | |
4744 dw_window_set_color(lbbox, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); | |
4745 dw_window_set_color(buttonbox, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); | |
4746 dw_window_set_font(stext, "9.WarpSans"); | |
4747 dw_window_set_color(stext, DW_CLR_BLACK, DW_CLR_PALEGRAY); | |
4748 dw_window_set_font(listbox, "9.WarpSans"); | |
4749 dw_window_set_font(okbutton, "9.WarpSans"); | |
4750 dw_window_set_font(cancelbutton, "9.WarpSans"); | |
4751 | |
4752 dw_window_show(mainwindow); | |
4753 | |
4754 dw_window_set_usize(mainwindow, 170, 340); | |
4755 | |
4756 /* Another small example */ | |
4757 flStyle |= DW_FCF_MINMAX | DW_FCF_SIZEBORDER; | |
4758 | |
4759 testwindow = dw_window_new(DW_DESKTOP, "Wow a test dialog! :) yay!", flStyle); | |
4760 | |
4761 testbox = dw_box_new(BOXVERT, 0); | |
4762 | |
4763 dw_box_pack_start(testwindow, testbox, 0, 0, TRUE, TRUE, 0); | |
4764 | |
4765 notebook = dw_notebook_new(1010L, TRUE); | |
4766 | |
4767 dw_box_pack_start(testbox, notebook, 100, 100, TRUE, TRUE, 0); | |
4768 | |
4769 testbox = dw_box_new(BOXVERT, 10); | |
4770 | |
4771 pageid = dw_notebook_page_new(notebook, 0L, FALSE); | |
4772 | |
4773 dw_notebook_pack(notebook, pageid, testbox); | |
4774 | |
4775 dw_notebook_page_set_text(notebook, pageid, "Test page"); | |
4776 dw_notebook_page_set_status_text(notebook, pageid, "Test page"); | |
4777 | |
4778 testok = dw_button_new("Ok", 1003L); | |
4779 | |
4780 dw_box_pack_start(testbox, testok, 60, 40, TRUE, TRUE, 10); | |
4781 | |
4782 testcancel = dw_button_new("Cancel", 1004L); | |
4783 | |
4784 dw_box_pack_start(testbox, testcancel, 60, 40, TRUE, TRUE, 10); | |
4785 | |
4786 testbox2 = dw_box_new(BOXHORZ, 0); | |
4787 | |
4788 dw_box_pack_start(testbox, testbox2, 0, 0, TRUE, TRUE, 0); | |
4789 | |
4790 testok2 = dw_button_new("Ok", 1003L); | |
4791 | |
4792 dw_box_pack_start(testbox2, testok2, 60, 40, TRUE, TRUE, 10); | |
4793 | |
4794 dw_box_pack_splitbar_start(testbox2); | |
4795 | |
4796 testcancel2 = dw_button_new("Cancel", 1004L); | |
4797 | |
4798 dw_box_pack_start(testbox2, testcancel2, 60, 40, TRUE, TRUE, 10); | |
4799 | |
4800 /* Set some nice fonts and colors */ | |
4801 dw_window_set_color(testbox, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); | |
4802 dw_window_set_color(testbox2, DW_CLR_PALEGRAY, DW_CLR_PALEGRAY); | |
4803 dw_window_set_font(testok, "9.WarpSans"); | |
4804 dw_window_set_font(testcancel, "9.WarpSans"); | |
4805 dw_window_set_font(testok2, "9.WarpSans"); | |
4806 dw_window_set_font(testcancel2, "9.WarpSans"); | |
4807 | |
4808 dw_window_show(testwindow); | |
4809 | |
4810 /* Setup the function callbacks */ | |
4811 dw_signal_connect(okbutton, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)mainwindow); | |
4812 dw_signal_connect(cancelbutton, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)mainwindow); | |
4813 dw_signal_connect(testok, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)testwindow); | |
4814 dw_signal_connect(testcancel, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)testwindow); | |
4815 dw_signal_connect(testok2, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)testwindow); | |
4816 dw_signal_connect(testcancel2, "clicked", DW_SIGNAL_FUNC(test_callback), (void *)testwindow); | |
4817 dw_signal_connect(mainwindow, "delete_event", DW_SIGNAL_FUNC(test_callback), (void *)mainwindow); | |
4818 dw_signal_connect(testwindow, "delete_event", DW_SIGNAL_FUNC(test_callback), (void *)testwindow); | |
4819 | |
4820 dw_main(0L, NULL); | |
4821 | |
4822 return 0; | |
4823 } | |
4824 #endif |