From 531f0f3c37f0ebd9e3c601327a959700e794e212 Mon Sep 17 00:00:00 2001
From: Robert Fewell <14uBobIT@gmail.com>
Date: Tue, 2 Aug 2016 09:41:07 +0100
Subject: [PATCH] Add sort button for Associations
---
src/gnome/dialog-trans-assoc.c | 54 +++++++++++++++++++
src/gnome/gtkbuilder/dialog-trans-assoc.glade | 19 ++++++-
2 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/src/gnome/dialog-trans-assoc.c b/src/gnome/dialog-trans-assoc.c
index 77eeeb3e87..e9ae812671 100644
--- a/src/gnome/dialog-trans-assoc.c
+++ b/src/gnome/dialog-trans-assoc.c
@@ -86,6 +86,56 @@ gnc_assoc_dialog_close_cb (GtkDialog *dialog, gpointer user_data)
LEAVE(" ");
}
+static gint
+sort_iter_compare_func (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ gint ret = 0;
+ gchar *uri1, *uri2;
+
+ gtk_tree_model_get (model, a, URI, &uri1, -1);
+ gtk_tree_model_get (model, b, URI, &uri2, -1);
+
+ ret = g_utf8_collate (uri1, uri2);
+
+ g_free (uri1);
+ g_free (uri2);
+
+ return ret;
+}
+
+static void
+assoc_dialog_sort (AssocDialog *assoc_dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeSortable *sortable;
+ gint id;
+ GtkSortType order;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW(assoc_dialog->view));
+
+ sortable = GTK_TREE_SORTABLE(model);
+
+ if (gtk_tree_sortable_get_sort_column_id (sortable, &id, &order))
+ {
+ if (order == GTK_SORT_ASCENDING)
+ order = GTK_SORT_DESCENDING;
+ else
+ order = GTK_SORT_ASCENDING;
+ }
+ else
+ {
+ gtk_tree_sortable_set_sort_func (sortable, URI, sort_iter_compare_func,
+ assoc_dialog, NULL);
+
+ order = GTK_SORT_ASCENDING;
+ }
+ /* set sort order */
+ gtk_tree_sortable_set_sort_column_id (sortable, URI, order);
+}
+
static void
assoc_dialog_update (AssocDialog *assoc_dialog)
{
@@ -146,6 +196,10 @@ gnc_assoc_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer user
assoc_dialog_update (assoc_dialog);
return;
+ case -8:
+ assoc_dialog_sort (assoc_dialog);
+ return;
+
case GTK_RESPONSE_CLOSE:
default:
gnc_close_gui_component_by_data (DIALOG_ASSOC_CM_CLASS, assoc_dialog);
diff --git a/src/gnome/gtkbuilder/dialog-trans-assoc.glade b/src/gnome/gtkbuilder/dialog-trans-assoc.glade
index d87d6642f1..6eaaffa984 100644
--- a/src/gnome/gtkbuilder/dialog-trans-assoc.glade
+++ b/src/gnome/gtkbuilder/dialog-trans-assoc.glade
@@ -36,6 +36,20 @@
@@ -178,6 +192,7 @@
+ sort
Check
close_button