gnucash maint: Readd the fix for the date/amount sorting for import main matcher

Robert Fewell bobit at code.gnucash.org
Fri Jun 7 11:49:30 EDT 2019


Updated	 via  https://github.com/Gnucash/gnucash/commit/0a1a28be (commit)
	from  https://github.com/Gnucash/gnucash/commit/520f350a (commit)



commit 0a1a28be16209d96b6b3857de6b0fc4153c3e890
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Fri Jun 7 16:47:22 2019 +0100

    Readd the fix for the date/amount sorting for import main matcher

diff --git a/gnucash/import-export/import-main-matcher.c b/gnucash/import-export/import-main-matcher.c
index 48aa5ff75..3e667f22b 100644
--- a/gnucash/import-export/import-main-matcher.c
+++ b/gnucash/import-export/import-main-matcher.c
@@ -64,13 +64,16 @@ struct _main_matcher_info
     GNCTransactionProcessedCB transaction_processed_cb;
     gpointer user_data;
     GNCImportPendingMatches *pending_matches;
+    GtkTreeViewColumn *account_column;
 };
 
 enum downloaded_cols
 {
-    DOWNLOADED_COL_DATE = 0,
+    DOWNLOADED_COL_DATE_TXT = 0,
+    DOWNLOADED_COL_DATE_INT64, // used only for sorting
     DOWNLOADED_COL_ACCOUNT,
     DOWNLOADED_COL_AMOUNT,
+    DOWNLOADED_COL_AMOUNT_DOUBLE, // used only for sorting
     DOWNLOADED_COL_DESCRIPTION,
     DOWNLOADED_COL_MEMO,
     DOWNLOADED_COL_ACTION_ADD,
@@ -637,7 +640,19 @@ add_text_column(GtkTreeView *view, const gchar *title, int col_num)
               "text", col_num,
               "background", DOWNLOADED_COL_COLOR,
               NULL);
-    gtk_tree_view_column_set_sort_column_id(column, col_num);
+
+    // If date column, use the time64 value for the sorting.
+    if (col_num == DOWNLOADED_COL_DATE_TXT)
+        gtk_tree_view_column_set_sort_column_id(column, DOWNLOADED_COL_DATE_INT64);
+    else if (col_num == DOWNLOADED_COL_AMOUNT) // If amount column, use double value
+    {
+        gtk_cell_renderer_set_alignment (renderer, 1.0, 0.5); // right align amount column
+        gtk_cell_renderer_set_padding (renderer, 5, 0); // add padding so its not close to description
+        gtk_tree_view_column_set_sort_column_id(column, DOWNLOADED_COL_AMOUNT_DOUBLE);
+    }
+    else
+        gtk_tree_view_column_set_sort_column_id(column, col_num);
+
     g_object_set(G_OBJECT(column),
                  "reorderable", TRUE,
                  "resizable", TRUE,
@@ -680,20 +695,22 @@ gnc_gen_trans_init_view (GNCImportMainMatcher *info,
     GtkTreeSelection *selection;
 
     view = info->view;
-    store = gtk_list_store_new(NUM_DOWNLOADED_COLS,
-                               G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+    store = gtk_list_store_new(NUM_DOWNLOADED_COLS, G_TYPE_STRING, G_TYPE_INT64,
+                               G_TYPE_STRING, G_TYPE_STRING, G_TYPE_DOUBLE,
                                G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN,
                                G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING,
                                GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_STRING);
     gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
     g_object_unref(store);
 
+    /* prevent the rows being dragged to a different order */
+    gtk_tree_view_set_reorderable (view, FALSE);
+
     /* Add the columns *
      * (keep the line break below to avoid a translator comment) */
-    add_text_column(view,
-                    _("Date"), DOWNLOADED_COL_DATE);
-    column = add_text_column(view, _("Account"), DOWNLOADED_COL_ACCOUNT);
-    gtk_tree_view_column_set_visible(column, show_account);
+    add_text_column(view, _("Date"), DOWNLOADED_COL_DATE_TXT);
+    info->account_column = add_text_column(view, _("Account"), DOWNLOADED_COL_ACCOUNT);
+    gtk_tree_view_column_set_visible(info->account_column, show_account);
     add_text_column(view, _("Amount"), DOWNLOADED_COL_AMOUNT);
     add_text_column(view, _("Description"), DOWNLOADED_COL_DESCRIPTION);
     add_text_column(view, _("Memo"), DOWNLOADED_COL_MEMO);
@@ -731,6 +748,10 @@ gnc_gen_trans_init_view (GNCImportMainMatcher *info,
                  NULL);
     gtk_tree_view_append_column(info->view, column);
 
+    /* default sort order */
+    gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(store),
+                                          DOWNLOADED_COL_DATE_INT64,
+                                          GTK_SORT_ASCENDING);
 
     selection = gtk_tree_view_get_selection(info->view);
     g_signal_connect(info->view, "row-activated",
@@ -744,7 +765,13 @@ gnc_gen_trans_init_view (GNCImportMainMatcher *info,
                      G_CALLBACK(gnc_gen_trans_onPopupMenu_cb), info);
 }
 
-
+static void
+show_account_column_toggled_cb (GtkToggleButton *togglebutton,
+                                GNCImportMainMatcher *info)
+{
+    gtk_tree_view_column_set_visible (info->account_column,
+         gtk_toggle_button_get_active (togglebutton));
+}
 
 GNCImportMainMatcher *gnc_gen_trans_list_new (GtkWidget *parent,
         const gchar* heading,
@@ -758,6 +785,7 @@ GNCImportMainMatcher *gnc_gen_trans_list_new (GtkWidget *parent,
     gboolean show_update;
     GtkStyleContext *stylectxt;
     GdkRGBA color;
+    GtkWidget *button;
 
     info = g_new0 (GNCImportMainMatcher, 1);
     info->pending_matches = gnc_import_PendingMatches_new();
@@ -786,6 +814,11 @@ GNCImportMainMatcher *gnc_gen_trans_list_new (GtkWidget *parent,
     info->view = GTK_TREE_VIEW(gtk_builder_get_object (builder, "downloaded_view"));
     g_assert (info->view != NULL);
 
+    button = GTK_WIDGET(gtk_builder_get_object (builder, "show_source_account_button"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), all_from_same_account);
+    g_signal_connect(G_OBJECT(button), "toggled",
+                     G_CALLBACK(show_account_column_toggled_cb), info);
+
     show_update = gnc_import_Settings_get_action_update_enabled(info->user_settings);
     gnc_gen_trans_init_view(info, all_from_same_account, show_update);
     heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label"));
@@ -825,6 +858,7 @@ GNCImportMainMatcher * gnc_gen_trans_assist_new (GtkWidget *parent,
     gboolean show_update;
     GtkStyleContext *stylectxt;
     GdkRGBA color;
+    GtkWidget *button;
 
     info = g_new0 (GNCImportMainMatcher, 1);
     info->pending_matches = gnc_import_PendingMatches_new();
@@ -853,6 +887,11 @@ GNCImportMainMatcher * gnc_gen_trans_assist_new (GtkWidget *parent,
     info->view = GTK_TREE_VIEW(gtk_builder_get_object (builder, "downloaded_view"));
     g_assert (info->view != NULL);
 
+    button = GTK_WIDGET(gtk_builder_get_object (builder, "show_source_account_button"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), all_from_same_account);
+    g_signal_connect(G_OBJECT(button), "toggled",
+                     G_CALLBACK(show_account_column_toggled_cb), info);
+
     show_update = gnc_import_Settings_get_action_update_enabled(info->user_settings);
     gnc_gen_trans_init_view(info, all_from_same_account, show_update);
     heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label"));
@@ -926,6 +965,8 @@ refresh_model_row (GNCImportMainMatcher *gui,
     gchar *int_required_class, *int_prob_required_class, *int_not_required_class;
     gchar *class_extension = NULL;
     Split *split;
+    time64 date;
+    gnc_numeric amount;
     g_assert (gui);
     g_assert (model);
     g_assert (info);
@@ -948,16 +989,17 @@ refresh_model_row (GNCImportMainMatcher *gui,
     gtk_list_store_set(store, iter, DOWNLOADED_COL_ACCOUNT, ro_text, -1);
 
     /*Date*/
-    text = qof_print_date ( xaccTransGetDate( gnc_import_TransInfo_get_trans(info) ) );
-    gtk_list_store_set(store, iter, DOWNLOADED_COL_DATE, text, -1);
+    date = xaccTransGetDate (gnc_import_TransInfo_get_trans(info));
+    text = qof_print_date (date);
+    gtk_list_store_set(store, iter, DOWNLOADED_COL_DATE_TXT, text, -1);
+    gtk_list_store_set(store, iter, DOWNLOADED_COL_DATE_INT64, date, -1);
     g_free(text);
 
     /*Amount*/
-    ro_text = xaccPrintAmount
-              (xaccSplitGetAmount (split),
-               gnc_split_amount_print_info(split, TRUE)
-              );
+    amount = xaccSplitGetAmount (split);
+    ro_text = xaccPrintAmount (amount, gnc_split_amount_print_info(split, TRUE));
     gtk_list_store_set(store, iter, DOWNLOADED_COL_AMOUNT, ro_text, -1);
+    gtk_list_store_set(store, iter, DOWNLOADED_COL_AMOUNT_DOUBLE, gnc_numeric_to_double (amount), -1);
 
     /*Description*/
     ro_text = xaccTransGetDescription(gnc_import_TransInfo_get_trans(info) );



Summary of changes:
 gnucash/import-export/import-main-matcher.c | 72 +++++++++++++++++++++++------
 1 file changed, 57 insertions(+), 15 deletions(-)



More information about the gnucash-changes mailing list