[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