Mercurial > dwindows
diff gtk/dw.c @ 478:ea099ba917c6
Added two new tree functions, get_title and get_parent and finished the
OS/2 folder browser. Will be porting to Unix soon. Windows tree
functions need to be completed. Will do that tomorrow.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 15 Oct 2003 09:55:28 +0000 |
parents | d11be1f40f8c |
children | 61e2973ad093 |
line wrap: on
line diff
--- a/gtk/dw.c Mon Oct 13 10:37:24 2003 +0000 +++ b/gtk/dw.c Wed Oct 15 09:55:28 2003 +0000 @@ -105,11 +105,13 @@ static gint _value_changed_event(GtkAdjustment *adjustment, gpointer user_data); #if GTK_MAJOR_VERSION > 1 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data); +static gint _tree_expand_event(GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer data); #else static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data); +static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data); #endif -static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data); -static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer user_data); +static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data); +static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer data); typedef struct { @@ -142,7 +144,7 @@ } SignalHandler; -#define SIGNALMAX 18 +#define SIGNALMAX 19 /* A list of signal forwarders, to account for paramater differences. */ static SignalList SignalTranslate[SIGNALMAX] = { @@ -163,7 +165,8 @@ { _set_focus_event, DW_SIGNAL_SET_FOCUS }, { _value_changed_event, DW_SIGNAL_VALUE_CHANGED }, { _switch_page_event, DW_SIGNAL_SWITCH_PAGE }, - { _column_click_event, DW_SIGNAL_COLUMN_CLICK } + { _column_click_event, DW_SIGNAL_COLUMN_CLICK }, + { _tree_expand_event, DW_SIGNAL_TREE_EXPAND } }; /* Alignment flags */ @@ -590,6 +593,19 @@ } return retval; } + +static gint _tree_expand_event(GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer user_data) +{ + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; + retval = treeexpandfunc(work.window, (HTREEITEM)arg1, work.data); + } + return retval; +} #else static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) { @@ -614,6 +630,19 @@ } return retval; } + +static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data) +{ + SignalHandler work = _get_signal_handler(widget, data); + int retval = FALSE; + + if(work.window) + { + int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; + retval = treeexpandfunc(work.window, (HTREEITEM)treeitem, work.data); + } + return retval; +} #endif static gint _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) @@ -2349,6 +2378,7 @@ gtk_tree_view_column_add_attribute(col, rend, "text", 0); gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); + gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); gtk_tree_view_set_expander_column(GTK_TREE_VIEW(tree), col); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); @@ -3903,7 +3933,7 @@ pixbuf = _find_pixbuf(icon); gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); - gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); + gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, parent, -1); if(pixbuf && !(icon & (1 << 31))) g_object_unref(pixbuf); retval = (HTREEITEM)iter; @@ -3939,6 +3969,7 @@ gtk_object_set_data(GTK_OBJECT(newitem), "_dw_text", (gpointer)strdup(title)); gtk_object_set_data(GTK_OBJECT(newitem), "_dw_itemdata", (gpointer)itemdata); gtk_object_set_data(GTK_OBJECT(newitem), "_dw_tree", (gpointer)tree); + gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parent", (gpointer)parent); hbox = gtk_hbox_new(FALSE, 2); gtk_object_set_data(GTK_OBJECT(newitem), "_dw_hbox", (gpointer)hbox); gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); @@ -4039,7 +4070,7 @@ pixbuf = _find_pixbuf(icon); gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); - gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); + gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, NULL, -1); if(pixbuf && !(icon & (1 << 31))) g_object_unref(pixbuf); retval = (HTREEITEM)iter; @@ -4238,6 +4269,60 @@ } /* + * Gets the text an item in a tree window (widget). + * Parameters: + * handle: Handle to the tree containing the item. + * item: Handle of the item to be modified. + */ +char * API dw_tree_get_title(HWND handle, HTREEITEM item) +{ + int _locked_by_me = FALSE; + char *text = NULL; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + GtkTreeIter iter = (GtkTreeIter)item; + GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_tree_store"); + + gtk_tree_model_get(store, &iter, 0, &text, -1); +#else + text = (char *)gtk_object_get_data(GTK_OBJECT(item), "_dw_text"); +#endif + DW_MUTEX_UNLOCK; + return text; +} + +/* + * Gets the text an item in a tree window (widget). + * Parameters: + * handle: Handle to the tree containing the item. + * item: Handle of the item to be modified. + */ +HTREEITEM API dw_tree_get_parent(HWND handle, HTREEITEM item) +{ + int _locked_by_me = FALSE; + HTREEITEM parent = (HTREEITEM)0; + + if(!handle || !item) + return; + + DW_MUTEX_LOCK; +#if GTK_MAJOR_VERSION > 1 + GtkTreeIter iter = (GtkTreeIter)item; + GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_tree_store"); + + gtk_tree_model_get(store, &iter, 4, &parent, -1); +#else + parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent"); +#endif + DW_MUTEX_UNLOCK; + return parent; +} + +/* * Gets the item data of a tree item. * Parameters: * handle: Handle to the tree containing the item. @@ -7992,6 +8077,10 @@ DW_MUTEX_UNLOCK; return; } + else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) + { + thisname = "row-expanded"; + } #else else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) {