summaryrefslogtreecommitdiff
path: root/window_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'window_main.c')
-rw-r--r--window_main.c152
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;
+}