Revision: 1497
          http://geeqie.svn.sourceforge.net/geeqie/?rev=1497&view=rev
Author:   zas_
Date:     2009-03-08 17:51:03 +0000 (Sun, 08 Mar 2009)

Log Message:
-----------
Advanced exif window: make all columns sortable and resizable.

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

Modified: trunk/src/advanced_exif.c
===================================================================
--- trunk/src/advanced_exif.c   2009-03-08 15:30:15 UTC (rev 1496)
+++ trunk/src/advanced_exif.c   2009-03-08 17:51:03 UTC (rev 1497)
@@ -283,12 +283,14 @@
                {
                gtk_tree_view_column_set_sizing(column, 
GTK_TREE_VIEW_COLUMN_FIXED);
                gtk_tree_view_column_set_fixed_width(column, 
ADVANCED_EXIF_DATA_COLUMN_WIDTH);
-               gtk_tree_view_column_set_resizable(column, TRUE);
                }
        else
                {
                gtk_tree_view_column_set_sizing(column, 
GTK_TREE_VIEW_COLUMN_AUTOSIZE);
                }
+       
+       gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_column_set_sort_column_id(column, n);
 
        renderer = gtk_cell_renderer_text_new();
        gtk_tree_view_column_pack_start(column, renderer, TRUE);
@@ -313,15 +315,57 @@
        g_free(ew);
 }
 
+static gint advanced_exif_sort_cb(GtkTreeModel *model, GtkTreeIter *a, 
GtkTreeIter *b, gpointer data)
+{
+       gint n = GPOINTER_TO_INT(data);
+       gint ret = 0;
+
+       switch (n)
+               {
+               case EXIF_ADVCOL_DESCRIPTION:
+               case EXIF_ADVCOL_VALUE:
+               case EXIF_ADVCOL_NAME:
+               case EXIF_ADVCOL_TAG:
+               case EXIF_ADVCOL_FORMAT:
+               case EXIF_ADVCOL_ELEMENTS:
+                       {
+                       gchar *s1, *s2;
+
+                       gtk_tree_model_get(model, a, n, &s1, -1);
+                       gtk_tree_model_get(model, b, n, &s2, -1);
+
+                       if (!s1 || !s2)
+                               {
+                               if (!s1 && !s2) break;
+                               ret = s1 ? 1 : -1;
+                               }
+                       else
+                               {
+                               ret = g_utf8_collate(s1, s2);
+                               }
+
+                       g_free(s1);
+                       g_free(s2);
+                       }
+                       break;
+
+               default:
+                               g_return_val_if_reached(0);
+               }
+
+       return ret;
+}
+
 GtkWidget *advanced_exif_new(void)
 {
        ExifWin *ew;
        GtkListStore *store;
        GdkGeometry geometry;
+       GtkTreeSortable *sortable;
+       gint n;
 
        ew = g_new0(ExifWin, 1);
 
-
        ew->window = window_new(GTK_WINDOW_TOPLEVEL, "view", NULL, NULL, 
_("Metadata"));
 
        geometry.min_width = 900;
@@ -342,20 +386,29 @@
        store = gtk_list_store_new(7, G_TYPE_BOOLEAN,
                                      G_TYPE_STRING, G_TYPE_STRING, 
G_TYPE_STRING,
                                      G_TYPE_STRING, G_TYPE_STRING, 
G_TYPE_STRING);
+
+       /* set up sorting */
+       sortable = GTK_TREE_SORTABLE(store);
+       for (n = EXIF_ADVCOL_DESCRIPTION; n <= EXIF_ADVCOL_ELEMENTS; n++)
+               gtk_tree_sortable_set_sort_func(sortable, n, 
advanced_exif_sort_cb,
+                                               GINT_TO_POINTER(n), NULL);
+
+       /* set initial sort order */
+       gtk_tree_sortable_set_sort_column_id(sortable, EXIF_ADVCOL_NAME, 
GTK_SORT_ASCENDING);
+
        ew->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
        g_object_unref(store);
 
        gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(ew->listview), TRUE);
        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(ew->listview), TRUE);
 
-       gtk_tree_view_set_search_column(GTK_TREE_VIEW(ew->listview), 
EXIF_ADVCOL_NAME);
-
        advanced_exif_add_column(ew->listview, _("Description"), 
EXIF_ADVCOL_DESCRIPTION, FALSE);
        advanced_exif_add_column(ew->listview, _("Value"), EXIF_ADVCOL_VALUE, 
TRUE);
        advanced_exif_add_column(ew->listview, _("Name"), EXIF_ADVCOL_NAME, 
FALSE);
        advanced_exif_add_column(ew->listview, _("Tag"), EXIF_ADVCOL_TAG, 
FALSE);
        advanced_exif_add_column(ew->listview, _("Format"), EXIF_ADVCOL_FORMAT, 
FALSE);
        advanced_exif_add_column(ew->listview, _("Elements"), 
EXIF_ADVCOL_ELEMENTS, FALSE);
+       
 
        gtk_drag_source_set(ew->listview,
                           GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,


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

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn

Reply via email to