Mercurial > dwindows
changeset 781:df6091308b3f
Have the basics of containers working now with the tree view widget.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 21 Mar 2011 04:25:52 +0000 |
parents | fda93b441c4d |
children | 5a4bfe989f50 |
files | gtk3/dw.c |
diffstat | 1 files changed, 139 insertions(+), 146 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk3/dw.c Mon Mar 21 01:33:51 2011 +0000 +++ b/gtk3/dw.c Mon Mar 21 04:25:52 2011 +0000 @@ -5345,6 +5345,7 @@ static int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) { int z; + char numbuf[20]; GtkWidget *tree; GtkListStore *store; GtkTreeViewColumn *col, *expander = NULL; @@ -5352,14 +5353,11 @@ GtkTreeSelection *sel; int _locked_by_me = FALSE; GType *array = calloc(count + 2, sizeof(gint)); - unsigned long *newflags = calloc(count, sizeof(unsigned long)); - - memcpy(newflags, flags, count * sizeof(unsigned long)); DW_MUTEX_LOCK; /* Save some of the info so it is easily accessible */ - g_object_set_data(G_OBJECT(handle), "_dw_cont_col_flags", (gpointer)newflags); g_object_set_data(G_OBJECT(handle), "_dw_cont_columns", GINT_TO_POINTER(count)); + g_object_set_data(G_OBJECT(handle), "_dw_cont_extra", GINT_TO_POINTER(extra)); /* First param is row title/data */ array[0] = G_TYPE_POINTER; @@ -5394,6 +5392,8 @@ /* Second loop... create the columns */ for(z=0;z<count;z++) { + sprintf(numbuf, "_dw_cont_col%d", z); + g_object_set_data(G_OBJECT(tree), numbuf, GINT_TO_POINTER(flags[z])); col = gtk_tree_view_column_new(); if(flags[z] & DW_CFA_BITMAPORICON) { @@ -5486,7 +5486,7 @@ memcpy(&newtitles[2], titles, sizeof(char *) * count); memcpy(&newflags[2], flags, sizeof(unsigned long) * count); - _dw_container_setup(handle, newflags, newtitles, count + 1, 1, 1); + _dw_container_setup(handle, newflags, newtitles, count + 2, 1, 2); if ( newtitles) free(newtitles); if ( newflags ) free(newflags); @@ -5678,138 +5678,117 @@ */ void *dw_container_alloc(HWND handle, int rowcount) { -#if 0 - int z, count = 0, prevrowcount = 0; - GtkWidget *clist; - GdkColor *fore, *back; - char **blah; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); - if(!clist) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - count = (int)g_object_get_data(G_OBJECT(clist), "_dw_colcount"); - prevrowcount = (int)g_object_get_data(G_OBJECT(clist), "_dw_rowcount"); - - if(!count) - { - DW_MUTEX_UNLOCK; - return NULL; - } - - blah = malloc(sizeof(char *) * count); - memset(blah, 0, sizeof(char *) * count); - - fore = (GdkColor *)g_object_get_data(G_OBJECT(clist), "_dw_foregdk"); - back = (GdkColor *)g_object_get_data(G_OBJECT(clist), "_dw_backgdk"); - gtk_clist_freeze(GTK_CLIST(clist)); - for(z=0;z<rowcount;z++) - { - gtk_clist_append(GTK_CLIST(clist), blah); - if(fore) - gtk_clist_set_foreground(GTK_CLIST(clist), z + prevrowcount, fore); - if(back) - gtk_clist_set_background(GTK_CLIST(clist), z + prevrowcount, back); - } - g_object_set_data(G_OBJECT(clist), "_dw_insertpos", GINT_TO_POINTER(prevrowcount)); - g_object_set_data(G_OBJECT(clist), "_dw_rowcount", GINT_TO_POINTER(rowcount + prevrowcount)); - free(blah); - DW_MUTEX_UNLOCK; - return (void *)handle; -#endif - return NULL; + int z, prevrowcount = 0; + GtkWidget *cont; + GtkListStore *store = NULL; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + cont = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); + + /* Make sure it is the correct tree type */ + if(cont && GTK_IS_TREE_VIEW(cont) && g_object_get_data(G_OBJECT(cont), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)) + store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW(cont)); + + if(store) + { + GtkTreeIter iter; + + prevrowcount = (int)g_object_get_data(G_OBJECT(cont), "_dw_rowcount"); + + for(z=0;z<rowcount;z++) + { + gtk_list_store_append(store, &iter); + } + g_object_set_data(G_OBJECT(cont), "_dw_insertpos", GINT_TO_POINTER(prevrowcount)); + g_object_set_data(G_OBJECT(cont), "_dw_rowcount", GINT_TO_POINTER(rowcount + prevrowcount)); + } + DW_MUTEX_UNLOCK; + return (void *)cont; } /* * Internal representation of dw_container_set_item() extracted so we can pass * two data pointers; icon and text for dw_filesystem_set_item(). */ -void _dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data, char *text) -{ -#if 0 - char numbuf[10], textbuffer[100]; +void _dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) +{ + char numbuf[20], textbuffer[100]; int flag = 0; - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); - if(!clist) - { - DW_MUTEX_UNLOCK; - return; - } - - sprintf(numbuf, "%d", column); - flag = (int)g_object_get_data(G_OBJECT(clist), numbuf); - row += (int)g_object_get_data(G_OBJECT(clist), "_dw_insertpos"); - - if(flag & DW_CFA_BITMAPORICON) - { - long hicon = *((long *)data); - GdkBitmap *bitmap = NULL; - GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist, NULL, NULL); - - if(pixmap) - gtk_clist_set_pixmap(GTK_CLIST(clist), row, column, pixmap, bitmap); - } - else if(flag & DW_CFA_STRINGANDICON) - { - long hicon = *((long *)data); - GdkBitmap *bitmap = NULL; - GdkPixmap *pixmap = _find_pixmap(&bitmap, hicon, clist, NULL, NULL); - - if(pixmap) - gtk_clist_set_pixtext(GTK_CLIST(clist), row, column, text, 2, pixmap, bitmap); - } - else if(flag & DW_CFA_STRING) - { - char *tmp = *((char **)data); - gtk_clist_set_text(GTK_CLIST(clist), row, column, tmp); - } - else if(flag & DW_CFA_ULONG) - { - ULONG tmp = *((ULONG *)data); - - sprintf(textbuffer, "%lu", tmp); - - gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); - } - else if(flag & DW_CFA_DATE) - { - struct tm curtm; - CDATE cdate = *((CDATE *)data); - - memset( &curtm, 0, sizeof(curtm) ); - curtm.tm_mday = cdate.day; - curtm.tm_mon = cdate.month - 1; - curtm.tm_year = cdate.year - 1900; - - strftime(textbuffer, 100, "%x", &curtm); - - gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); - } - else if(flag & DW_CFA_TIME) - { - struct tm curtm; - CTIME ctime = *((CTIME *)data); - - memset( &curtm, 0, sizeof(curtm) ); - curtm.tm_hour = ctime.hours; - curtm.tm_min = ctime.minutes; - curtm.tm_sec = ctime.seconds; - - strftime(textbuffer, 100, "%X", &curtm); - - gtk_clist_set_text(GTK_CLIST(clist), row, column, textbuffer); - } - DW_MUTEX_UNLOCK; -#endif + GtkWidget *cont; + GtkListStore *store = NULL; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + cont = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); + + /* Make sure it is the correct tree type */ + if(cont && GTK_IS_TREE_VIEW(cont) && g_object_get_data(G_OBJECT(cont), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)) + store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW(cont)); + + if(store) + { + GtkTreeIter iter; + + sprintf(numbuf, "_dw_cont_col%d", column); + flag = (int)g_object_get_data(G_OBJECT(cont), numbuf); + if(pointer) + { + row += (int)g_object_get_data(G_OBJECT(cont), "_dw_insertpos"); + } + + if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, row)) + { + if(flag & DW_CFA_BITMAPORICON) + { + long hicon = *((long *)data); + GdkPixbuf *pixbuf = _find_pixbuf(hicon, NULL, NULL); + + if(pixbuf) + gtk_list_store_set(store, &iter, column + 1, pixbuf, -1); + } + else if(flag & DW_CFA_STRING) + { + char *tmp = *((char **)data); + gtk_list_store_set(store, &iter, column + 1, tmp, -1); + } + else if(flag & DW_CFA_ULONG) + { + ULONG tmp = *((ULONG *)data); + + gtk_list_store_set(store, &iter, column + 1, tmp, -1); + } + else if(flag & DW_CFA_DATE) + { + struct tm curtm; + CDATE cdate = *((CDATE *)data); + + memset( &curtm, 0, sizeof(curtm) ); + curtm.tm_mday = cdate.day; + curtm.tm_mon = cdate.month - 1; + curtm.tm_year = cdate.year - 1900; + + strftime(textbuffer, 100, "%x", &curtm); + + gtk_list_store_set(store, &iter, column + 1, textbuffer, -1); + } + else if(flag & DW_CFA_TIME) + { + struct tm curtm; + CTIME ctime = *((CTIME *)data); + + memset( &curtm, 0, sizeof(curtm) ); + curtm.tm_hour = ctime.hours; + curtm.tm_min = ctime.minutes; + curtm.tm_sec = ctime.seconds; + + strftime(textbuffer, 100, "%X", &curtm); + + gtk_list_store_set(store, &iter, column + 1, textbuffer, -1); + } + } + } + DW_MUTEX_UNLOCK; } /* @@ -5823,7 +5802,12 @@ */ void dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) { - _dw_container_set_item(handle, NULL, column, row, data, NULL); + GtkTreeView *tree = pointer; + + if(GTK_IS_TREE_VIEW(tree)) + { + _dw_container_set_item(handle, NULL, column, row, data); + } } /* @@ -5836,7 +5820,7 @@ */ void dw_container_change_item(HWND handle, int column, int row, void *data) { - _dw_container_set_item(handle, NULL, column, row, data, NULL); + _dw_container_set_item(handle, NULL, column, row, data); } /* @@ -5877,7 +5861,13 @@ */ void dw_filesystem_set_file(HWND handle, void *pointer, int row, char *filename, HICN icon) { - _dw_container_set_item(handle, pointer, 0, row, (void *)&icon, filename); + GtkTreeView *tree = pointer; + + if(GTK_IS_TREE_VIEW(tree)) + { + _dw_container_set_item(handle, pointer, 0, row, (void *)&icon); + _dw_container_set_item(handle, pointer, 1, row, (void *)&filename); + } } /* @@ -5891,7 +5881,12 @@ */ void dw_filesystem_set_item(HWND handle, void *pointer, int column, int row, void *data) { - _dw_container_set_item(handle, pointer, column + 1, row, data, NULL); + GtkTreeView *tree = pointer; + + if(GTK_IS_TREE_VIEW(tree)) + { + _dw_container_set_item(handle, pointer, column + 2, row, data); + } } /* @@ -5902,22 +5897,21 @@ */ int dw_container_get_column_type(HWND handle, int column) { - char numbuf[10]; + char numbuf[20]; int flag, rc = 0; -#if 0 - GtkWidget *clist; - int _locked_by_me = FALSE; - - DW_MUTEX_LOCK; - clist = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); - if(!clist) + GtkWidget *cont; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + cont = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); + if(!cont) { DW_MUTEX_UNLOCK; return 0; } - sprintf(numbuf, "%d", column); - flag = (int)g_object_get_data(G_OBJECT(clist), numbuf); + sprintf(numbuf, "_dw_cont_col%d", column); + flag = (int)g_object_get_data(G_OBJECT(cont), numbuf); if(flag & DW_CFA_BITMAPORICON) rc = DW_CFA_BITMAPORICON; @@ -5932,7 +5926,6 @@ else rc = 0; DW_MUTEX_UNLOCK; -#endif return rc; } @@ -5944,7 +5937,7 @@ */ int API dw_filesystem_get_column_type(HWND handle, int column) { - return dw_container_get_column_type( handle, column + 1 ); + return dw_container_get_column_type( handle, column + 2 ); } /*