Mercurial > dwindows
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; |