Mercurial > dwindows
diff 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 |
line wrap: on
line diff
--- a/gtk/dw.c Fri Aug 17 12:25:52 2001 +0000 +++ b/gtk/dw.c Sat Aug 25 05:39:33 2001 +0000 @@ -82,6 +82,7 @@ void _item_select_event(GtkWidget *widget, GtkWidget *child, gpointer data); void _expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data); void _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); +void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data); typedef struct { @@ -98,7 +99,7 @@ } SignalHandler; -#define SIGNALMAX 13 +#define SIGNALMAX 14 /* A list of signal forwarders, to account for paramater differences. */ SignalList SignalTranslate[SIGNALMAX] = { @@ -114,6 +115,7 @@ { _container_select_event, "container-select" }, { _container_context_event, "container-context" }, { _item_select_event, "item-select" }, + { _tree_select_event, "tree-select" }, { _set_focus_event, "set-focus" } }; @@ -344,6 +346,19 @@ } } +void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) +{ + SignalHandler *work = (SignalHandler *)data; + + if(work) + { + void (*treeselectfunc)(HWND, HWND, char *, void *) = work->func; + char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "text"); + + treeselectfunc(work->window, child, text, work->data); + } +} + void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) { SignalHandler *work = (SignalHandler *)data; @@ -977,7 +992,8 @@ void dw_window_pointer(HWND handle, int pointertype) { GdkCursor *cursor = gdk_cursor_new(pointertype); - gdk_window_set_cursor(handle->window, cursor); + if(handle && handle->window) + gdk_window_set_cursor(handle->window, cursor); gdk_cursor_destroy(cursor); } @@ -2424,6 +2440,7 @@ } item = gtk_tree_item_new(); label = gtk_label_new(title); + gtk_object_set_data(GTK_OBJECT(item), "text", (gpointer)strdup(title)); hbox = gtk_hbox_new(FALSE, 2); gdkpix = _find_pixmap(&gdkbmp, icon, hbox); pixmap = gtk_pixmap_new(gdkpix, gdkbmp); @@ -2439,7 +2456,14 @@ subtree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(parent)); if(!subtree) { + void *thisfunc = (void *)gtk_object_get_data(GTK_OBJECT(tree), "select-child-func"); + void *work = (void *)gtk_object_get_data(GTK_OBJECT(tree), "select-child-data"); + subtree = gtk_tree_new(); + + if(thisfunc && work) + gtk_signal_connect(GTK_OBJECT(subtree), "select-child", GTK_SIGNAL_FUNC(thisfunc), work); + gtk_object_set_user_data(GTK_OBJECT(parent), subtree); gtk_tree_set_selection_mode(GTK_TREE(subtree), GTK_SELECTION_SINGLE); gtk_tree_set_view_mode(GTK_TREE(subtree), GTK_TREE_VIEW_ITEM); @@ -2455,6 +2479,49 @@ return item; } +/* + * Removes all nodes from a tree. + * Parameters: + * handle: Handle to the window (widget) to be cleared. + */ +void dw_tree_clear(HWND handle) +{ + GtkWidget *tree; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!tree || !GTK_IS_TREE(tree)) + { + DW_MUTEX_UNLOCK; + return; + } + gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000); + DW_MUTEX_UNLOCK; +} + +/* + * Removes a node from a tree. + * Parameters: + * handle: Handle to the window (widget) to be cleared. + * item: Handle to node to be deleted. + */ +void dw_tree_delete(HWND handle, HWND item) +{ + GtkWidget *tree; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); + if(!tree || !GTK_IS_TREE(tree)) + { + DW_MUTEX_UNLOCK; + return; + } + gtk_tree_remove_item(GTK_TREE(tree), item); + DW_MUTEX_UNLOCK; +} + int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) { GtkWidget *clist; @@ -4620,6 +4687,15 @@ { thisname = "focus-in-event"; } + else if(GTK_IS_TREE(thiswindow) && strcmp(signame, "tree-select") == 0) + { + if(thisfunc) + { + gtk_object_set_data(GTK_OBJECT(thiswindow), "select-child-func", (gpointer)thisfunc); + gtk_object_set_data(GTK_OBJECT(thiswindow), "select-child-data", (gpointer)work); + } + thisname = "select-child"; + } if(!thisfunc || !thiswindow) {