diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2009-12-22 19:26:54 +0100 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2009-12-22 19:26:54 +0100 |
commit | 4e9cdd282beb1c6dcbcca148745f5665b561c403 (patch) | |
tree | a6ff0bd1d8db019b73f61bfa2c7d3271c1116ed9 /window_main.c |
Initial commit.
Diffstat (limited to 'window_main.c')
-rw-r--r-- | window_main.c | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/window_main.c b/window_main.c new file mode 100644 index 0000000..978b88a --- /dev/null +++ b/window_main.c @@ -0,0 +1,152 @@ +#include <string.h> + +#include "window_main.h" +#include "walls_ui.h" +#include "db.h" +#include "walls_model.h" + +inline static void filetree_create_model(GtkTreeView *filetree) { + GtkTreeModel *tree_model; + GtkTreeIter toplevel, child; + GArray *array; + struct directory_t *dir; + //treestore = gtk_tree_store_new(4, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); + tree_model = GTK_TREE_MODEL(walls_model_new()); + + /*array = NULL; + if(db_get_top_level_directories(&array)) { + for(int i = 0; ; i++) { + dir = &g_array_index(array, struct directory_t, i); + if(!dir->name) break; + + gtk_tree_store_append(treestore, &toplevel, NULL); + g_printf("%s: %d\n", dir->name, dir->dirid); + gtk_tree_store_set(treestore, &toplevel, 0, dir->name, 1, dir->dirid, -1); + + gtk_tree_store_append(treestore, &child, &toplevel); + gtk_tree_store_set(treestore, &child, 0, "_walls_temp_", -1); + } + for(int i = 0; ; i++) { + dir = &g_array_index(array, struct directory_t, i); + if(!dir->name) break; + g_free(dir->name); + } + g_array_free(array, TRUE); + }*/ + gtk_tree_view_set_model(filetree, GTK_TREE_MODEL(tree_model)); +} + +inline static void filetree_init(GtkTreeView *filetree) { + GtkTreeViewColumn *col1, *col2, *col3, *col4; + GtkCellRenderer *renderer; + + col1 = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col1, "Name"); + gtk_tree_view_append_column(filetree, col1); + + col2 = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col2, "Size"); + gtk_tree_view_append_column(filetree, col2); + + col3 = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col3, "Width"); + gtk_tree_view_append_column(filetree, col3); + + col4 = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col4, "Height"); + gtk_tree_view_append_column(filetree, col4); + + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(col1, renderer, TRUE); + gtk_tree_view_column_add_attribute(col1, renderer, "text", 0); + + filetree_create_model(filetree); +} + +G_MODULE_EXPORT gboolean on_filetree_test_expand_row(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { + printf("on_filetree_test_expand_row\n"); + if(gtk_tree_path_get_depth(path) == 0) { + return TRUE; + } + return FALSE; +} + +G_MODULE_EXPORT void on_filetree_row_expanded(GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { + printf("expanded\n"); + GtkTreeModel *model; + GtkTreeIter newiter; + GtkTreeIter child; + GArray *array; + gchar **split; + GValue value; + sqlite_uint64 dirid; + gboolean temp_found = FALSE; + + model = gtk_tree_view_get_model(treeview); + if(gtk_tree_model_iter_children(model, &child, iter) == TRUE) { + memset(&value, 0, sizeof(GValue)); + gtk_tree_model_get_value(model, &child, 0, &value); + if(g_strcmp0("_walls_temp_", g_value_get_string(&value)) == 0) + temp_found = TRUE; + else + return; + } + + memset(&value, 0, sizeof(GValue)); + gtk_tree_model_get_value(model, iter, 0, &value); + split = g_strsplit(g_value_get_string(&value), ":", 2); + dirid = g_ascii_strtoull(split[0], NULL, 10); + g_strfreev(split); + + array = NULL; + if(db_get_wallpapers(dirid, &array)) { + for(int i = 0; i < array->len; i++) { + struct wallpaper_t *wp = &g_array_index(array, struct wallpaper_t, i); + gtk_tree_store_append((GtkTreeStore*)model, &newiter, iter); + gtk_tree_store_set((GtkTreeStore*)model, &newiter, 0, wp->filepath, -1); + } + g_array_free(array, TRUE); + if(gtk_tree_model_iter_children(model, &child, iter) == TRUE) { + if(temp_found) + gtk_tree_store_remove((GtkTreeStore*)model, &child); + } + } +} + +int gui_main(int argc, char **argv) { + GtkWidget *window; + GtkWidget *filetree; + GtkBuilder *builder ; + GError *error = NULL; + + if(!db_open()) + return 1; + + gtk_init(&argc, &argv); + + builder = gtk_builder_new(); + //if(!gtk_builder_add_from_file(builder, "walls.ui", &error)) { + if(!gtk_builder_add_from_string(builder, ui_string, -1, &error)) { + g_warning("%s", error->message); + g_free(error); + return 1; + } + + window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); + gtk_window_set_title(GTK_WINDOW(window), "walls"); + + filetree = GTK_WIDGET(gtk_builder_get_object(builder, "filetree")); + filetree_init(GTK_TREE_VIEW(filetree)); + + gtk_builder_connect_signals(builder, NULL); + + g_object_unref(G_OBJECT(builder)); + + gtk_widget_show_all(window); + + gtk_main(); + + db_close(); + + return 0; +} |