[Rawstudio-commit] r2015 - trunk/src

Anders Brander anders at brander.dk
Wed Sep 17 23:05:14 CEST 2008


Author: abrander
Date: 2008-09-17 23:05:14 +0200 (Wed, 17 Sep 2008)
New Revision: 2015

Modified:
   trunk/src/rs-store.c
   trunk/src/rs-store.h
Log:
Added rs_store_set|get_sort_method().

Modified: trunk/src/rs-store.c
===================================================================
--- trunk/src/rs-store.c	2008-09-17 13:53:30 UTC (rev 2014)
+++ trunk/src/rs-store.c	2008-09-17 21:05:14 UTC (rev 2015)
@@ -78,6 +78,7 @@
 	gulong counthandler;
 	gchar *last_path;
 	gboolean cancelled;
+	RS_STORE_SORT_METHOD sort_method;
 	GString *tooltip_text;
 	GtkTreePath *tooltip_last_path;
 };
@@ -108,6 +109,12 @@
 static void selection_changed(GtkIconView *iconview, gpointer data);
 static GtkWidget *make_iconview(GtkWidget *iconview, RSStore *store, gint prio);
 static gboolean model_filter_prio(GtkTreeModel *model, GtkTreeIter *iter, gpointer data);
+static gint model_sort_name(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata);
+static gint model_sort_timestamp(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata);
+static gint model_sort_iso(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata);
+static gint model_sort_aperture(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata);
+static gint model_sort_focallength(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata);
+static gint model_sort_shutterspeed(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata);
 static void count_priorities_del(GtkTreeModel *treemodel, GtkTreePath *path, gpointer data);
 static void count_priorities(GtkTreeModel *treemodel, GtkTreePath *do_not_use1, GtkTreeIter *do_not_use2, gpointer data);
 static void icon_get_selected_iters(GtkIconView *iconview, GtkTreePath *path, gpointer user_data);
@@ -308,6 +315,7 @@
 	gtk_box_pack_start(GTK_BOX (hbox), GTK_WIDGET(store->notebook), TRUE, TRUE, 0);
 
 	store->last_path = NULL;
+	rs_store_set_sort_method(store, RS_STORE_SORT_BY_NAME);
 	store->tooltip_text = g_string_new("...");
 	store->tooltip_last_path = NULL;
 }
@@ -611,6 +619,76 @@
 	return(ret);
 }
 
+static gint
+model_sort_timestamp(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata)
+{
+	gint ret;
+	RSMetadata *a, *b;
+
+	gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1);
+	gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1);
+	ret = a->timestamp - b->timestamp;
+	g_object_unref(a);
+	g_object_unref(b);
+	return(ret);
+}
+
+static gint
+model_sort_iso(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata)
+{
+	gint ret;
+	RSMetadata *a, *b;
+
+	gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1);
+	gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1);
+	ret = a->iso - b->iso;
+	g_object_unref(a);
+	g_object_unref(b);
+	return(ret);
+}
+
+static gint
+model_sort_aperture(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata)
+{
+	gint ret;
+	RSMetadata *a, *b;
+
+	gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1);
+	gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1);
+	ret = a->aperture*10.0 - b->aperture*10.0;
+	g_object_unref(a);
+	g_object_unref(b);
+	return(ret);
+}
+
+static gint
+model_sort_focallength(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata)
+{
+	gint ret;
+	RSMetadata *a, *b;
+
+	gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1);
+	gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1);
+	ret = a->focallength*10.0 - b->focallength*10.0;
+	g_object_unref(a);
+	g_object_unref(b);
+	return(ret);
+}
+
+static gint
+model_sort_shutterspeed(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata)
+{
+	gint ret;
+	RSMetadata *a, *b;
+
+	gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1);
+	gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1);
+	ret = b->shutterspeed*10.0 - a->shutterspeed*10.0;
+	g_object_unref(a);
+	g_object_unref(b);
+	return(ret);
+}
+
 static void
 count_priorities_del(GtkTreeModel *treemodel, GtkTreePath *path, gpointer data)
 {
@@ -1044,7 +1122,6 @@
 	static gboolean running = FALSE;
 	GStaticMutex lock = G_STATIC_MUTEX_INIT;
 
-	GtkTreeSortable *sortable;
 	RS_PROGRESS *rsp;
 	GtkWidget *cancel;
 	gboolean load_8bit = FALSE;
@@ -1106,15 +1183,6 @@
 	g_list_foreach (loadable, (GFunc)g_free, NULL);
 	g_list_free(loadable);
 
-	/* Sort the store */
-	sortable = GTK_TREE_SORTABLE(store->store);
-	gtk_tree_sortable_set_sort_func(sortable,
-		TEXT_COLUMN,
-		model_sort_name,
-		NULL,
-		NULL);
-	gtk_tree_sortable_set_sort_column_id(sortable, TEXT_COLUMN, GTK_SORT_ASCENDING);
-
 	/* unblock the priority count */
 	g_signal_handler_unblock(store->store, store->counthandler);
 
@@ -1543,7 +1611,73 @@
 	return gtk_notebook_get_current_page(store->notebook);
 }
 
+/**
+ * Sets the sorting method in a RSStore
+ * @param store A RSStore
+ * @param sort A sort method from the RS_STORE_SORT_BY-family of enums
+ */
 void
+rs_store_set_sort_method(RSStore *store, RS_STORE_SORT_METHOD sort_method)
+{
+	GtkTreeSortable *sortable;
+	gint sort_column = TEXT_COLUMN;
+	GtkTreeIterCompareFunc sort_func = model_sort_name;
+
+	g_assert(RS_IS_STORE(store));
+
+	store->sort_method = sort_method;
+
+	switch (sort_method)
+	{
+		case RS_STORE_SORT_BY_NAME:
+			sort_column = TEXT_COLUMN;
+			sort_func = model_sort_name;
+			break;
+		case RS_STORE_SORT_BY_TIMESTAMP:
+			sort_column = METADATA_COLUMN;
+			sort_func = model_sort_timestamp;
+			break;
+		case RS_STORE_SORT_BY_ISO:
+			sort_column = METADATA_COLUMN;
+			sort_func = model_sort_iso;
+			break;
+		case RS_STORE_SORT_BY_APERTURE:
+			sort_column = METADATA_COLUMN;
+			sort_func = model_sort_aperture;
+			break;
+		case RS_STORE_SORT_BY_FOCALLENGTH:
+			sort_column = METADATA_COLUMN;
+			sort_func = model_sort_focallength;
+			break;
+		case RS_STORE_SORT_BY_SHUTTERSPEED:
+			sort_column = METADATA_COLUMN;
+			sort_func = model_sort_shutterspeed;
+			break;
+	}
+
+	sortable = GTK_TREE_SORTABLE(store->store);
+	gtk_tree_sortable_set_sort_func(sortable,
+		sort_column,
+		sort_func,
+		store,
+		NULL);
+	gtk_tree_sortable_set_sort_column_id(sortable, sort_column, GTK_SORT_ASCENDING);
+}
+
+/**
+ * Get the sorting method for a RSStore
+ * @param store A RSStore
+ * @return A sort method from the RS_STORE_SORT_BY-family of enums
+ */
+extern RS_STORE_SORT_METHOD
+rs_store_get_sort_method(RSStore *store)
+{
+	g_assert(RS_IS_STORE(store));
+
+	return store->sort_method;
+}
+
+void
 cairo_draw_thumbnail(cairo_t *cr, GdkPixbuf *pixbuf, gint x, gint y, gint width, gint height, gdouble alpha)
 {
 	gdouble greyvalue = 1.0;

Modified: trunk/src/rs-store.h
===================================================================
--- trunk/src/rs-store.h	2008-09-17 13:53:30 UTC (rev 2014)
+++ trunk/src/rs-store.h	2008-09-17 21:05:14 UTC (rev 2015)
@@ -29,6 +29,15 @@
 	GtkHBoxClass parent_class;
 };
 
+typedef enum {
+	RS_STORE_SORT_BY_NAME,
+	RS_STORE_SORT_BY_TIMESTAMP,
+	RS_STORE_SORT_BY_ISO,
+	RS_STORE_SORT_BY_APERTURE,
+	RS_STORE_SORT_BY_FOCALLENGTH,
+	RS_STORE_SORT_BY_SHUTTERSPEED,
+} RS_STORE_SORT_METHOD;
+
 GType rs_store_get_type (void);
 
 /**
@@ -167,6 +176,22 @@
 rs_store_get_current_page(RSStore *store);
 
 /**
+ * Set the sorting method for a RSStore
+ * @param store A RSStore
+ * @param sort_method A sort method from the RS_STORE_SORT_BY-family of enums
+ */
+extern void
+rs_store_set_sort_method(RSStore *store, RS_STORE_SORT_METHOD sort_method);
+
+/**
+ * Get the sorting method for a RSStore
+ * @param store A RSStore
+ * @return A sort method from the RS_STORE_SORT_BY-family of enums
+ */
+extern RS_STORE_SORT_METHOD
+rs_store_get_sort_method(RSStore *store);
+
+/**
  * Marks a selection of thumbnails as a group
  * @param store A RSStore
  */




More information about the Rawstudio-commit mailing list