comparison gtk/dw.c @ 30:b1d7e8a28dfa

Added tree view functions and signal.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 25 Aug 2001 05:39:33 +0000
parents 6a246b3bb14f
children 72675de7d229
comparison
equal deleted inserted replaced
29:a33dfdc5b40a 30:b1d7e8a28dfa
80 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data); 80 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data);
81 void _container_context_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); 82 void _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data);
83 void _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data); 83 void _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data);
84 void _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); 84 void _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data);
85 void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data);
85 86
86 typedef struct 87 typedef struct
87 { 88 {
88 void *func; 89 void *func;
89 char name[30]; 90 char name[30];
96 void *func; 97 void *func;
97 gpointer data; 98 gpointer data;
98 99
99 } SignalHandler; 100 } SignalHandler;
100 101
101 #define SIGNALMAX 13 102 #define SIGNALMAX 14
102 103
103 /* A list of signal forwarders, to account for paramater differences. */ 104 /* A list of signal forwarders, to account for paramater differences. */
104 SignalList SignalTranslate[SIGNALMAX] = { 105 SignalList SignalTranslate[SIGNALMAX] = {
105 { _configure_event, "configure_event" }, 106 { _configure_event, "configure_event" },
106 { _key_press_event, "key_press_event" }, 107 { _key_press_event, "key_press_event" },
112 { _activate_event, "activate" }, 113 { _activate_event, "activate" },
113 { _generic_event, "clicked" }, 114 { _generic_event, "clicked" },
114 { _container_select_event, "container-select" }, 115 { _container_select_event, "container-select" },
115 { _container_context_event, "container-context" }, 116 { _container_context_event, "container-context" },
116 { _item_select_event, "item-select" }, 117 { _item_select_event, "item-select" },
118 { _tree_select_event, "tree-select" },
117 { _set_focus_event, "set-focus" } 119 { _set_focus_event, "set-focus" }
118 }; 120 };
119 121
120 /* Finds the translation function for a given signal name */ 122 /* Finds the translation function for a given signal name */
121 void *_findsigfunc(char *signame) 123 void *_findsigfunc(char *signame)
339 gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col); 341 gtk_clist_get_selection_info(GTK_CLIST(widget), event->x, event->y, &row, &col);
340 342
341 text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row); 343 text = (char *)gtk_clist_get_row_data(GTK_CLIST(widget), row);
342 contextfunc(work->window, text, event->x, event->y, work->data); 344 contextfunc(work->window, text, event->x, event->y, work->data);
343 } 345 }
346 }
347 }
348
349 void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data)
350 {
351 SignalHandler *work = (SignalHandler *)data;
352
353 if(work)
354 {
355 void (*treeselectfunc)(HWND, HWND, char *, void *) = work->func;
356 char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "text");
357
358 treeselectfunc(work->window, child, text, work->data);
344 } 359 }
345 } 360 }
346 361
347 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 362 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
348 { 363 {
975 * cursortype: ID of the pointer you want. 990 * cursortype: ID of the pointer you want.
976 */ 991 */
977 void dw_window_pointer(HWND handle, int pointertype) 992 void dw_window_pointer(HWND handle, int pointertype)
978 { 993 {
979 GdkCursor *cursor = gdk_cursor_new(pointertype); 994 GdkCursor *cursor = gdk_cursor_new(pointertype);
980 gdk_window_set_cursor(handle->window, cursor); 995 if(handle && handle->window)
996 gdk_window_set_cursor(handle->window, cursor);
981 gdk_cursor_destroy(cursor); 997 gdk_cursor_destroy(cursor);
982 } 998 }
983 999
984 /* 1000 /*
985 * Releases previous mouse capture. 1001 * Releases previous mouse capture.
2422 DW_MUTEX_UNLOCK; 2438 DW_MUTEX_UNLOCK;
2423 return NULL; 2439 return NULL;
2424 } 2440 }
2425 item = gtk_tree_item_new(); 2441 item = gtk_tree_item_new();
2426 label = gtk_label_new(title); 2442 label = gtk_label_new(title);
2443 gtk_object_set_data(GTK_OBJECT(item), "text", (gpointer)strdup(title));
2427 hbox = gtk_hbox_new(FALSE, 2); 2444 hbox = gtk_hbox_new(FALSE, 2);
2428 gdkpix = _find_pixmap(&gdkbmp, icon, hbox); 2445 gdkpix = _find_pixmap(&gdkbmp, icon, hbox);
2429 pixmap = gtk_pixmap_new(gdkpix, gdkbmp); 2446 pixmap = gtk_pixmap_new(gdkpix, gdkbmp);
2430 gtk_container_add(GTK_CONTAINER(item), hbox); 2447 gtk_container_add(GTK_CONTAINER(item), hbox);
2431 gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0); 2448 gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, TRUE, 0);
2437 if(parent) 2454 if(parent)
2438 { 2455 {
2439 subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); 2456 subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent));
2440 if(!subtree) 2457 if(!subtree)
2441 { 2458 {
2459 void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "select-child-func");
2460 void *work = (void *)gtk_object_get_data(GTK_OBJECT(tree), "select-child-data");
2461
2442 subtree = gtk_tree_new(); 2462 subtree = gtk_tree_new();
2463
2464 if(thisfunc && work)
2465 gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc), work);
2466
2443 gtk_object_set_user_data(GTK_OBJECT(parent), subtree); 2467 gtk_object_set_user_data(GTK_OBJECT(parent), subtree);
2444 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); 2468 gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE);
2445 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); 2469 gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM);
2446 gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree); 2470 gtk_tree_item_set_subtree(GTK_TREE_ITEM(parent), subtree);
2447 gtk_widget_show(subtree); 2471 gtk_widget_show(subtree);
2451 else 2475 else
2452 gtk_tree_append(GTK_TREE(tree), item); 2476 gtk_tree_append(GTK_TREE(tree), item);
2453 gtk_widget_show(item); 2477 gtk_widget_show(item);
2454 DW_MUTEX_UNLOCK; 2478 DW_MUTEX_UNLOCK;
2455 return item; 2479 return item;
2480 }
2481
2482 /*
2483 * Removes all nodes from a tree.
2484 * Parameters:
2485 * handle: Handle to the window (widget) to be cleared.
2486 */
2487 void dw_tree_clear(HWND handle)
2488 {
2489 GtkWidget *tree;
2490 int _locked_by_me = FALSE;
2491
2492 DW_MUTEX_LOCK;
2493 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
2494 if(!tree || !GTK_IS_TREE(tree))
2495 {
2496 DW_MUTEX_UNLOCK;
2497 return;
2498 }
2499 gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000);
2500 DW_MUTEX_UNLOCK;
2501 }
2502
2503 /*
2504 * Removes a node from a tree.
2505 * Parameters:
2506 * handle: Handle to the window (widget) to be cleared.
2507 * item: Handle to node to be deleted.
2508 */
2509 void dw_tree_delete(HWND handle, HWND item)
2510 {
2511 GtkWidget *tree;
2512 int _locked_by_me = FALSE;
2513
2514 DW_MUTEX_LOCK;
2515 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
2516 if(!tree || !GTK_IS_TREE(tree))
2517 {
2518 DW_MUTEX_UNLOCK;
2519 return;
2520 }
2521 gtk_tree_remove_item(GTK_TREE(tree), item);
2522 DW_MUTEX_UNLOCK;
2456 } 2523 }
2457 2524
2458 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) 2525 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra)
2459 { 2526 {
2460 GtkWidget *clist; 2527 GtkWidget *clist;
4618 } 4685 }
4619 else if(GTK_IS_WINDOW(thiswindow) && strcmp(signame, "set-focus") == 0) 4686 else if(GTK_IS_WINDOW(thiswindow) && strcmp(signame, "set-focus") == 0)
4620 { 4687 {
4621 thisname = "focus-in-event"; 4688 thisname = "focus-in-event";
4622 } 4689 }
4690 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, "tree-select") == 0)
4691 {
4692 if(thisfunc)
4693 {
4694 gtk_object_set_data(GTK_OBJECT(thiswindow), "select-child-func", (gpointer)thisfunc);
4695 gtk_object_set_data(GTK_OBJECT(thiswindow), "select-child-data", (gpointer)work);
4696 }
4697 thisname = "select-child";
4698 }
4623 4699
4624 if(!thisfunc || !thiswindow) 4700 if(!thisfunc || !thiswindow)
4625 { 4701 {
4626 free(work); 4702 free(work);
4627 DW_MUTEX_UNLOCK; 4703 DW_MUTEX_UNLOCK;