Revision: 1318
          http://geeqie.svn.sourceforge.net/geeqie/?rev=1318&view=rev
Author:   nadvornik
Date:     2008-12-25 12:39:34 +0000 (Thu, 25 Dec 2008)

Log Message:
-----------
implemented a possibility to connect keywords with marks

Modified Paths:
--------------
    trunk/src/bar_info.c

Modified: trunk/src/bar_info.c
===================================================================
--- trunk/src/bar_info.c        2008-12-25 12:28:04 UTC (rev 1317)
+++ trunk/src/bar_info.c        2008-12-25 12:39:34 UTC (rev 1318)
@@ -359,7 +359,8 @@
 
 enum {
        KEYWORD_COLUMN_TOGGLE = 0,
-       KEYWORD_COLUMN_TEXT
+       KEYWORD_COLUMN_TEXT,
+       KEYWORD_COLUMN_MARK
 };
 
 typedef struct _BarInfoData BarInfoData;
@@ -409,6 +410,26 @@
        g_free(comment);
 }
 
+static gchar *bar_info_get_mark_text(const gchar *key)
+{
+       gint i;
+       static gchar buf[10];
+       
+       for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
+               {
+               FileDataGetMarkFunc get_mark_func;
+               FileDataSetMarkFunc set_mark_func;
+               gpointer data;
+               file_data_get_registered_mark_func(i, &get_mark_func, 
&set_mark_func, &data);
+               if (get_mark_func == meta_data_get_keyword_mark && strcmp(data, 
key) == 0) 
+                       {
+                       sprintf(buf, " %d ", i + 1);
+                       return buf;
+                       }
+               }
+       return " ... ";
+}
+
 static void bar_keyword_list_sync(BarInfoData *bd, GList *keywords)
 {
        GList *list;
@@ -442,7 +463,8 @@
 
                gtk_list_store_append(store, &iter);
                gtk_list_store_set(store, &iter, KEYWORD_COLUMN_TOGGLE, 
find_string_in_list(keywords, key),
-                                                KEYWORD_COLUMN_TEXT, key, -1);
+                                                KEYWORD_COLUMN_TEXT, key,
+                                                KEYWORD_COLUMN_MARK, 
bar_info_get_mark_text(key), -1);
 
                list = list->prev;
                }
@@ -695,6 +717,52 @@
        file_data_register_notify_func(bar_info_notify_cb, bd, 
NOTIFY_PRIORITY_LOW);
 }
 
+static void bar_info_mark_edited (GtkCellRendererText *cell, const gchar 
*path, const gchar *text, gpointer data)
+{
+       BarInfoData *bd = data;
+       GtkTreeModel *store;
+       GtkTreeIter iter;
+       GtkTreePath *tpath;
+       gchar *key = NULL;
+       gint i;
+       FileDataGetMarkFunc get_mark_func;
+       FileDataSetMarkFunc set_mark_func;
+       gpointer mark_func_data;
+
+       file_data_unregister_notify_func(bar_info_notify_cb, bd);
+
+       store = gtk_tree_view_get_model(GTK_TREE_VIEW(bd->keyword_treeview));
+
+       tpath = gtk_tree_path_new_from_string(path);
+       gtk_tree_model_get_iter(store, &iter, tpath);
+       gtk_tree_path_free(tpath);
+
+       gtk_tree_model_get(store, &iter, KEYWORD_COLUMN_TEXT, &key, -1);
+
+       for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
+               {
+               file_data_get_registered_mark_func(i, &get_mark_func, 
&set_mark_func, &mark_func_data);
+               if (get_mark_func == meta_data_get_keyword_mark && 
strcmp(mark_func_data, key) == 0) 
+                       {
+                       g_free(mark_func_data);
+                       file_data_register_mark_func(i, NULL, NULL, NULL);
+                       }
+               }
+
+       if (sscanf(text, " %d ", &i) &&i >=1 && i <= FILEDATA_MARKS_SIZE)
+               {
+               i--;
+               file_data_get_registered_mark_func(i, &get_mark_func, 
&set_mark_func, &mark_func_data);
+               if (get_mark_func == meta_data_get_keyword_mark && 
mark_func_data) g_free(mark_func_data); 
+               file_data_register_mark_func(i, meta_data_get_keyword_mark, 
meta_data_set_keyword_mark, g_strdup(key));
+               }
+
+       g_free(key);
+
+       file_data_register_notify_func(bar_info_notify_cb, bd, 
NOTIFY_PRIORITY_LOW);
+       bar_info_update(bd);
+}
+
 void bar_info_close(GtkWidget *bar)
 {
        BarInfoData *bd;
@@ -717,6 +785,26 @@
        g_free(bd);
 }
 
+static GtkTreeModel *create_marks_list(void)
+{
+       GtkListStore *model;
+       GtkTreeIter iter;
+       gint i;
+
+       /* create list store */
+       model = gtk_list_store_new (1, G_TYPE_STRING);
+       for (i = 0; i < FILEDATA_MARKS_SIZE; i++)
+               {
+               char str[10];
+               sprintf(str, " %d ", i + 1);
+               gtk_list_store_append (model, &iter);
+               gtk_list_store_set(model, &iter, 0, str, -1);
+               }
+       gtk_list_store_append (model, &iter);
+       gtk_list_store_set(model, &iter, 0, " ... ", -1);
+       return GTK_TREE_MODEL (model);
+}
+
 GtkWidget *bar_info_new(FileData *fd, gint metadata_only, GtkWidget 
*bounding_widget)
 {
        BarInfoData *bd;
@@ -812,7 +900,7 @@
        gtk_box_pack_start(GTK_BOX(hbox), scrolled, TRUE, TRUE, 0);
        gtk_widget_show(scrolled);
 
-       store = gtk_list_store_new(2, G_TYPE_BOOLEAN, G_TYPE_STRING);
+       store = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, 
G_TYPE_STRING);
        bd->keyword_treeview = 
gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
        g_object_unref(store);
 
@@ -842,6 +930,23 @@
 
        gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), 
column);
 
+       column = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY);
+
+       renderer = gtk_cell_renderer_combo_new();
+       g_object_set(G_OBJECT(renderer), "editable", (gboolean)TRUE,
+                                        "model", create_marks_list(),
+                                        "text-column", 0,
+                                        "has-entry", FALSE,
+                                        NULL);
+
+       gtk_tree_view_column_pack_start(column, renderer, TRUE);
+       gtk_tree_view_column_add_attribute(column, renderer, "text", 
KEYWORD_COLUMN_MARK);
+       g_signal_connect (renderer, "edited",
+                         G_CALLBACK (bar_info_mark_edited), bd);
+       gtk_tree_view_append_column(GTK_TREE_VIEW(bd->keyword_treeview), 
column);
+
+
        gtk_container_add(GTK_CONTAINER(scrolled), bd->keyword_treeview);
        gtk_widget_show(bd->keyword_treeview);
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn

Reply via email to