Mercurial > dwindows
comparison 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 |
comparison
equal
deleted
inserted
replaced
477:923b46b0716c | 478:ea099ba917c6 |
---|---|
103 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); | 103 static gint _set_focus_event(GtkWindow *window, GtkWidget *widget, gpointer data); |
104 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data); | 104 static gint _tree_context_event(GtkWidget *widget, GdkEventButton *event, gpointer data); |
105 static gint _value_changed_event(GtkAdjustment *adjustment, gpointer user_data); | 105 static gint _value_changed_event(GtkAdjustment *adjustment, gpointer user_data); |
106 #if GTK_MAJOR_VERSION > 1 | 106 #if GTK_MAJOR_VERSION > 1 |
107 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data); | 107 static gint _tree_select_event(GtkTreeSelection *sel, gpointer data); |
108 static gint _tree_expand_event(GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer data); | |
108 #else | 109 #else |
109 static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data); | 110 static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data); |
110 #endif | 111 static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data); |
111 static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data); | 112 #endif |
112 static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer user_data); | 113 static gint _switch_page_event(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data); |
114 static gint _column_click_event(GtkWidget *widget, gint column_num, gpointer data); | |
113 | 115 |
114 typedef struct | 116 typedef struct |
115 { | 117 { |
116 GdkPixmap *pixmap; | 118 GdkPixmap *pixmap; |
117 GdkBitmap *mask; | 119 GdkBitmap *mask; |
140 gint cid; | 142 gint cid; |
141 void *intfunc; | 143 void *intfunc; |
142 | 144 |
143 } SignalHandler; | 145 } SignalHandler; |
144 | 146 |
145 #define SIGNALMAX 18 | 147 #define SIGNALMAX 19 |
146 | 148 |
147 /* A list of signal forwarders, to account for paramater differences. */ | 149 /* A list of signal forwarders, to account for paramater differences. */ |
148 static SignalList SignalTranslate[SIGNALMAX] = { | 150 static SignalList SignalTranslate[SIGNALMAX] = { |
149 { _configure_event, DW_SIGNAL_CONFIGURE }, | 151 { _configure_event, DW_SIGNAL_CONFIGURE }, |
150 { _key_press_event, DW_SIGNAL_KEY_PRESS }, | 152 { _key_press_event, DW_SIGNAL_KEY_PRESS }, |
161 { _item_select_event, DW_SIGNAL_LIST_SELECT }, | 163 { _item_select_event, DW_SIGNAL_LIST_SELECT }, |
162 { _tree_select_event, DW_SIGNAL_ITEM_SELECT }, | 164 { _tree_select_event, DW_SIGNAL_ITEM_SELECT }, |
163 { _set_focus_event, DW_SIGNAL_SET_FOCUS }, | 165 { _set_focus_event, DW_SIGNAL_SET_FOCUS }, |
164 { _value_changed_event, DW_SIGNAL_VALUE_CHANGED }, | 166 { _value_changed_event, DW_SIGNAL_VALUE_CHANGED }, |
165 { _switch_page_event, DW_SIGNAL_SWITCH_PAGE }, | 167 { _switch_page_event, DW_SIGNAL_SWITCH_PAGE }, |
166 { _column_click_event, DW_SIGNAL_COLUMN_CLICK } | 168 { _column_click_event, DW_SIGNAL_COLUMN_CLICK }, |
169 { _tree_expand_event, DW_SIGNAL_TREE_EXPAND } | |
167 }; | 170 }; |
168 | 171 |
169 /* Alignment flags */ | 172 /* Alignment flags */ |
170 #define DW_CENTER 0.5f | 173 #define DW_CENTER 0.5f |
171 #define DW_LEFT 0.0f | 174 #define DW_LEFT 0.0f |
588 } | 591 } |
589 } | 592 } |
590 } | 593 } |
591 return retval; | 594 return retval; |
592 } | 595 } |
596 | |
597 static gint _tree_expand_event(GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer user_data) | |
598 { | |
599 SignalHandler work = _get_signal_handler(widget, data); | |
600 int retval = FALSE; | |
601 | |
602 if(work.window) | |
603 { | |
604 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; | |
605 retval = treeexpandfunc(work.window, (HTREEITEM)arg1, work.data); | |
606 } | |
607 return retval; | |
608 } | |
593 #else | 609 #else |
594 static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) | 610 static gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) |
595 { | 611 { |
596 SignalHandler work = _get_signal_handler((GtkWidget *)tree, data); | 612 SignalHandler work = _get_signal_handler((GtkWidget *)tree, data); |
597 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); | 613 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "_dw_tree"); |
609 { | 625 { |
610 int (*treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = work.func; | 626 int (*treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = work.func; |
611 char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "_dw_text"); | 627 char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "_dw_text"); |
612 void *itemdata = (void *)gtk_object_get_data(GTK_OBJECT(child), "_dw_itemdata"); | 628 void *itemdata = (void *)gtk_object_get_data(GTK_OBJECT(child), "_dw_itemdata"); |
613 retval = treeselectfunc(work.window, (HTREEITEM)child, text, work.data, itemdata); | 629 retval = treeselectfunc(work.window, (HTREEITEM)child, text, work.data, itemdata); |
630 } | |
631 return retval; | |
632 } | |
633 | |
634 static gint _tree_expand_event(GtkTreeItem *treeitem, gpointer data) | |
635 { | |
636 SignalHandler work = _get_signal_handler(widget, data); | |
637 int retval = FALSE; | |
638 | |
639 if(work.window) | |
640 { | |
641 int (*treeexpandfunc)(HWND, HTREEITEM, void *) = work.func; | |
642 retval = treeexpandfunc(work.window, (HTREEITEM)treeitem, work.data); | |
614 } | 643 } |
615 return retval; | 644 return retval; |
616 } | 645 } |
617 #endif | 646 #endif |
618 | 647 |
2346 gtk_tree_view_column_add_attribute(col, rend, "pixbuf", 1); | 2375 gtk_tree_view_column_add_attribute(col, rend, "pixbuf", 1); |
2347 rend = gtk_cell_renderer_text_new(); | 2376 rend = gtk_cell_renderer_text_new(); |
2348 gtk_tree_view_column_pack_start(col, rend, TRUE); | 2377 gtk_tree_view_column_pack_start(col, rend, TRUE); |
2349 gtk_tree_view_column_add_attribute(col, rend, "text", 0); | 2378 gtk_tree_view_column_add_attribute(col, rend, "text", 0); |
2350 | 2379 |
2380 gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); | |
2351 gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); | 2381 gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); |
2352 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(tree), col); | 2382 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(tree), col); |
2353 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); | 2383 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); |
2354 | 2384 |
2355 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); | 2385 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); |
3901 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); | 3931 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); |
3902 | 3932 |
3903 pixbuf = _find_pixbuf(icon); | 3933 pixbuf = _find_pixbuf(icon); |
3904 | 3934 |
3905 gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); | 3935 gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); |
3906 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); | 3936 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, parent, -1); |
3907 if(pixbuf && !(icon & (1 << 31))) | 3937 if(pixbuf && !(icon & (1 << 31))) |
3908 g_object_unref(pixbuf); | 3938 g_object_unref(pixbuf); |
3909 retval = (HTREEITEM)iter; | 3939 retval = (HTREEITEM)iter; |
3910 } | 3940 } |
3911 DW_MUTEX_UNLOCK; | 3941 DW_MUTEX_UNLOCK; |
3937 newitem = gtk_tree_item_new(); | 3967 newitem = gtk_tree_item_new(); |
3938 label = gtk_label_new(title); | 3968 label = gtk_label_new(title); |
3939 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_text", (gpointer)strdup(title)); | 3969 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_text", (gpointer)strdup(title)); |
3940 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_itemdata", (gpointer)itemdata); | 3970 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_itemdata", (gpointer)itemdata); |
3941 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_tree", (gpointer)tree); | 3971 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_tree", (gpointer)tree); |
3972 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_parent", (gpointer)parent); | |
3942 hbox = gtk_hbox_new(FALSE, 2); | 3973 hbox = gtk_hbox_new(FALSE, 2); |
3943 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_hbox", (gpointer)hbox); | 3974 gtk_object_set_data(GTK_OBJECT(newitem), "_dw_hbox", (gpointer)hbox); |
3944 gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); | 3975 gdkpix = _find_pixmap(&gdkbmp, icon, hbox, NULL, NULL); |
3945 gtk_container_add(GTK_CONTAINER(newitem), hbox); | 3976 gtk_container_add(GTK_CONTAINER(newitem), hbox); |
3946 if(gdkpix) | 3977 if(gdkpix) |
4037 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); | 4068 iter = (GtkTreeIter *)malloc(sizeof(GtkTreeIter)); |
4038 | 4069 |
4039 pixbuf = _find_pixbuf(icon); | 4070 pixbuf = _find_pixbuf(icon); |
4040 | 4071 |
4041 gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); | 4072 gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); |
4042 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, -1); | 4073 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, 2, itemdata, 3, iter, 4, NULL, -1); |
4043 if(pixbuf && !(icon & (1 << 31))) | 4074 if(pixbuf && !(icon & (1 << 31))) |
4044 g_object_unref(pixbuf); | 4075 g_object_unref(pixbuf); |
4045 retval = (HTREEITEM)iter; | 4076 retval = (HTREEITEM)iter; |
4046 } | 4077 } |
4047 DW_MUTEX_UNLOCK; | 4078 DW_MUTEX_UNLOCK; |
4233 | 4264 |
4234 DW_MUTEX_LOCK; | 4265 DW_MUTEX_LOCK; |
4235 gtk_object_set_data(GTK_OBJECT(item), "_dw_itemdata", (gpointer)itemdata); | 4266 gtk_object_set_data(GTK_OBJECT(item), "_dw_itemdata", (gpointer)itemdata); |
4236 DW_MUTEX_UNLOCK; | 4267 DW_MUTEX_UNLOCK; |
4237 #endif | 4268 #endif |
4269 } | |
4270 | |
4271 /* | |
4272 * Gets the text an item in a tree window (widget). | |
4273 * Parameters: | |
4274 * handle: Handle to the tree containing the item. | |
4275 * item: Handle of the item to be modified. | |
4276 */ | |
4277 char * API dw_tree_get_title(HWND handle, HTREEITEM item) | |
4278 { | |
4279 int _locked_by_me = FALSE; | |
4280 char *text = NULL; | |
4281 | |
4282 if(!handle || !item) | |
4283 return; | |
4284 | |
4285 DW_MUTEX_LOCK; | |
4286 #if GTK_MAJOR_VERSION > 1 | |
4287 GtkTreeIter iter = (GtkTreeIter)item; | |
4288 GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_tree_store"); | |
4289 | |
4290 gtk_tree_model_get(store, &iter, 0, &text, -1); | |
4291 #else | |
4292 text = (char *)gtk_object_get_data(GTK_OBJECT(item), "_dw_text"); | |
4293 #endif | |
4294 DW_MUTEX_UNLOCK; | |
4295 return text; | |
4296 } | |
4297 | |
4298 /* | |
4299 * Gets the text an item in a tree window (widget). | |
4300 * Parameters: | |
4301 * handle: Handle to the tree containing the item. | |
4302 * item: Handle of the item to be modified. | |
4303 */ | |
4304 HTREEITEM API dw_tree_get_parent(HWND handle, HTREEITEM item) | |
4305 { | |
4306 int _locked_by_me = FALSE; | |
4307 HTREEITEM parent = (HTREEITEM)0; | |
4308 | |
4309 if(!handle || !item) | |
4310 return; | |
4311 | |
4312 DW_MUTEX_LOCK; | |
4313 #if GTK_MAJOR_VERSION > 1 | |
4314 GtkTreeIter iter = (GtkTreeIter)item; | |
4315 GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_tree_store"); | |
4316 | |
4317 gtk_tree_model_get(store, &iter, 4, &parent, -1); | |
4318 #else | |
4319 parent = (HTREEITEM)gtk_object_get_data(GTK_OBJECT(item), "_dw_parent"); | |
4320 #endif | |
4321 DW_MUTEX_UNLOCK; | |
4322 return parent; | |
4238 } | 4323 } |
4239 | 4324 |
4240 /* | 4325 /* |
4241 * Gets the item data of a tree item. | 4326 * Gets the item data of a tree item. |
4242 * Parameters: | 4327 * Parameters: |
7990 cid = g_signal_connect(G_OBJECT(thiswindow), thisname, (GCallback)thisfunc, (gpointer)sigid); | 8075 cid = g_signal_connect(G_OBJECT(thiswindow), thisname, (GCallback)thisfunc, (gpointer)sigid); |
7991 _set_signal_handler_id(treeview, sigid, cid); | 8076 _set_signal_handler_id(treeview, sigid, cid); |
7992 DW_MUTEX_UNLOCK; | 8077 DW_MUTEX_UNLOCK; |
7993 return; | 8078 return; |
7994 } | 8079 } |
8080 else if(GTK_IS_TREE_VIEW(thiswindow) && strcmp(signame, DW_SIGNAL_TREE_EXPAND) == 0) | |
8081 { | |
8082 thisname = "row-expanded"; | |
8083 } | |
7995 #else | 8084 #else |
7996 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) | 8085 else if(GTK_IS_TREE(thiswindow) && strcmp(signame, DW_SIGNAL_ITEM_CONTEXT) == 0) |
7997 { | 8086 { |
7998 thisfunc = _findsigfunc("tree-context"); | 8087 thisfunc = _findsigfunc("tree-context"); |
7999 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); | 8088 sigid = _set_signal_handler(thiswindow, window, sigfunc, data, thisfunc); |