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 @@ False end + + + _Sort Association + True + True + True + True + + + False + False + 0 + + _Locate Association @@ -47,7 +61,7 @@ False False - 0 + 1 @@ -63,7 +77,7 @@ False False - 1 + 2 @@ -178,6 +192,7 @@ + sort Check close_button