From 0d4b1caee4135b6e0dcd2aa3bd6ce2387c1c3773 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Sun, 25 Apr 2010 17:28:49 +0200 Subject: Added a tree model to display tags in tree structures. Adding children to tags is not yet implemented. --- window_main.c | 59 +++++++++++++++++++++-------------------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) (limited to 'window_main.c') diff --git a/window_main.c b/window_main.c index e5cd3b7..d327177 100644 --- a/window_main.c +++ b/window_main.c @@ -11,6 +11,7 @@ #include "window_tag.h" #include "preload.h" #include "window_config.h" +#include "tag_model.h" enum zoom_mode_t { ZOOM_BESTFIT, @@ -80,6 +81,9 @@ inline static void tagview_create_model(GtkTreeView *tagview) { struct tag_t *tag; GtkTreeIter iter; + gtk_tree_view_set_model(tagview, GTK_TREE_MODEL(tag_model_new())); + return; + model = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT64); if(db_get_tags_all(&array)) { @@ -114,7 +118,7 @@ inline static void tagview_init(GtkTreeView *tagview) { renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_end(col2, renderer, TRUE); - gtk_tree_view_column_add_attribute(col2, renderer, "text", 1); + gtk_tree_view_column_add_attribute(col2, renderer, "text", 2); tagview_create_model(tagview); } @@ -493,10 +497,8 @@ void display_from_tagview() { GtkTreeIter iter; GtkTreeModel *model, *old_model; GtkListStore *liststore; - GValue value = {0}; - gboolean active; GArray *tagarray, *wallarray; - guint64 id; + struct tag_t *tag; model = gtk_tree_view_get_model(GTK_TREE_VIEW(tagview)); @@ -506,18 +508,12 @@ void display_from_tagview() { tagarray = g_array_new(FALSE, FALSE, sizeof(guint64)); do { - gtk_tree_model_get_value(model, &iter, 0, &value); - active = g_value_get_boolean(&value); - g_value_unset(&value); - - if(!active) + if(!tag_model_get_checked(model, &iter)) continue; - gtk_tree_model_get_value(model, &iter, 2, &value); - id = g_value_get_uint64(&value); - g_value_unset(&value); + tag_model_get_tag_record(GTK_TREE_MODEL(model), &iter, &tag); - g_array_append_val(tagarray, id); + g_array_append_val(tagarray, tag->id); } while(gtk_tree_model_iter_next(model, &iter)); if(!db_get_walls_by_tags(tagarray, &wallarray)) { @@ -542,17 +538,14 @@ void display_from_tagview() { void on_main_tagview_cell_toggled(GtkCellRendererToggle *cell_renderer, gchar *path_string, gpointer user_data) { GtkTreeIter iter; GtkTreeModel *model; - GValue value = {0}; gboolean active; model = gtk_tree_view_get_model(GTK_TREE_VIEW(tagview)); gtk_tree_model_get_iter_from_string(model, &iter, path_string); - gtk_tree_model_get_value(model, &iter, 0, &value); - active = g_value_get_boolean(&value); - g_value_unset(&value); - gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, !active, -1); + active = tag_model_get_checked(GTK_TREE_MODEL(model), &iter); + tag_model_set_checked(GTK_TREE_MODEL(model), &iter, !active); display_from_tagview(); } @@ -813,36 +806,26 @@ inline static void update_wall_tags(GArray *wallarray, guint64 tagid, gboolean a /** * Update tags for wallpapers. */ -static void update_tags(GArray *wallarray, GtkListStore *liststore) { +static void update_tags(GArray *wallarray, GtkTreeModel *model) { GtkTreeIter iter; - GValue value = {0}; - gboolean active, inconsistent; - guint64 tagid; + gboolean active; + struct tag_t *tag; /* No tags available. */ - if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(liststore), &iter)) { + if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { return; } do { - gtk_tree_model_get_value(GTK_TREE_MODEL(liststore), &iter, 1, &value); - inconsistent = g_value_get_boolean(&value); - g_value_unset(&value); - /* Don't update inconsistent tags. */ - if(inconsistent) + if(tag_model_get_inconsistent(GTK_TREE_MODEL(model), &iter)) continue; - gtk_tree_model_get_value(GTK_TREE_MODEL(liststore), &iter, 0, &value); - active = g_value_get_boolean(&value); - g_value_unset(&value); - - gtk_tree_model_get_value(GTK_TREE_MODEL(liststore), &iter, 3, &value); - tagid = g_value_get_uint64(&value); - g_value_unset(&value); + active = tag_model_get_checked(GTK_TREE_MODEL(model), &iter); + tag_model_get_tag_record(GTK_TREE_MODEL(model), &iter, &tag); - update_wall_tags(wallarray, tagid, active); - } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &iter)); + update_wall_tags(wallarray, tag->id, active); + } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); } void on_tags_activate(GtkMenuItem *menuitem, gpointer user_data) { @@ -855,7 +838,7 @@ void on_tags_activate(GtkMenuItem *menuitem, gpointer user_data) { data = window_tagview_new(GTK_WIDGET(window), array); if(gtk_dialog_run(GTK_DIALOG(data->dialog)) == GTK_RESPONSE_APPLY) { - update_tags(array, GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(data->tagview)))); + update_tags(array, GTK_TREE_MODEL(gtk_tree_view_get_model(GTK_TREE_VIEW(data->tagview)))); } gtk_widget_destroy(GTK_WIDGET(data->dialog)); -- cgit v1.2.3