From 679d59e4451b62c1115c51942b4a99feb69f24e7 Mon Sep 17 00:00:00 2001 From: Mike Evans Date: Fri, 8 Feb 2013 11:02:55 +0000 Subject: [PATCH] Bug 683881 Partial implementation. TODO: Saving search preferences doesn't save reverse sort. The blank_split remains at the bottom of the register when reverse sorted. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@22766 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/gnome/gnc-plugin-page-register.c | 43 +++++++++++++++++++ src/gnome/gnc-split-reg.c | 11 +++++ src/gnome/gnc-split-reg.h | 6 +++ .../gtkbuilder/gnc-plugin-page-register.glade | 38 ++++++++++------ 4 files changed, 86 insertions(+), 12 deletions(-) diff --git a/src/gnome/gnc-plugin-page-register.c b/src/gnome/gnc-plugin-page-register.c index fe6ec6b5461..2ad0b519b47 100644 --- a/src/gnome/gnc-plugin-page-register.c +++ b/src/gnome/gnc-plugin-page-register.c @@ -107,6 +107,7 @@ static void gnc_plugin_page_register_summarybar_position_changed(GConfEntry *ent void gnc_plugin_page_register_sort_button_cb(GtkToggleButton *button, GncPluginPageRegister *page); void gnc_plugin_page_register_sort_response_cb(GtkDialog *dialog, gint response, GncPluginPageRegister *plugin_page); void gnc_plugin_page_register_sort_order_save_cb(GtkToggleButton *button, GncPluginPageRegister *page); +void gnc_plugin_page_register_sort_order_reverse_cb(GtkToggleButton *button, GncPluginPageRegister *page); static gchar *gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page); void gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order); @@ -491,6 +492,7 @@ typedef struct GncPluginPageRegisterPrivate SortType original_sort_type; gboolean original_save_order; gboolean save_order; + gboolean reverse_order; } sd; struct @@ -918,6 +920,7 @@ gnc_plugin_page_register_create_widget (GncPluginPage *plugin_page) { /* Set the sort order for the split register and status of save order button */ priv->sd.save_order = FALSE; + priv->sd.reverse_order = FALSE; order = gnc_plugin_page_register_get_sort_order(plugin_page); PINFO("Loaded Sort order is %s", order); @@ -1761,6 +1764,41 @@ gnc_plugin_page_register_sort_order_save_cb (GtkToggleButton *button, LEAVE(" "); } +/** This function is called whenever the reverse sort order is checked + * or unchecked which allows reversing of the sort order. + * + * @param button The toggle button that was changed. + * + * @param page A pointer to the GncPluginPageRegister that is + * associated with this sort order dialog. + */ +void +gnc_plugin_page_register_sort_order_reverse_cb (GtkToggleButton *button, + GncPluginPageRegister *page) + +{ + GncPluginPageRegisterPrivate *priv; + + g_return_if_fail(GTK_IS_CHECK_BUTTON(button)); + g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(page)); + + ENTER("Reverse toggle button (%p), plugin_page %p", button, page); + + /* Compute the new save sort order */ + priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(page); + + if (gtk_toggle_button_get_active(button)) + { + gnc_split_reg_set_sort_reversed(priv->gsr, FALSE); + priv->sd.reverse_order = TRUE; + } + else + { + gnc_split_reg_set_sort_reversed(priv->gsr, TRUE); + priv->sd.reverse_order = FALSE; + } + LEAVE(" "); +} /************************************************************/ /* "Filter By" Dialog */ @@ -2872,6 +2910,11 @@ gnc_plugin_page_register_cmd_view_sort_by (GtkAction *action, button = GTK_WIDGET(gtk_builder_get_object (builder, "sort_save")); if (priv->sd.save_order == TRUE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + + /* Set the button for the current reverse_order order */ + button = GTK_WIDGET(gtk_builder_get_object (builder, "sort_reverse")); + if(priv->sd.reverse_order == TRUE) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); priv->sd.num_radio = GTK_WIDGET(gtk_builder_get_object (builder, "BY_NUM")); priv->sd.act_radio = GTK_WIDGET(gtk_builder_get_object (builder, "BY_ACTION")); diff --git a/src/gnome/gnc-split-reg.c b/src/gnome/gnc-split-reg.c index df80dc9a6e7..5e686adb274 100644 --- a/src/gnome/gnc-split-reg.c +++ b/src/gnome/gnc-split-reg.c @@ -152,6 +152,7 @@ void gnc_split_reg_sort_desc_cb (GtkWidget *w, gpointer data); void gnc_split_reg_sort_action_cb (GtkWidget *w, gpointer data); void gnc_split_reg_sort_notes_cb (GtkWidget *w, gpointer data); + void gnc_split_reg_destroy_cb(GtkWidget *widget, gpointer data); void gnc_split_reg_size_allocate( GtkWidget *widget, GtkAllocation *allocation, @@ -1720,6 +1721,15 @@ gnc_split_reg_sort_notes_cb(GtkWidget *w, gpointer data) gnc_split_reg_sort(gsr, BY_NOTES); } + +void +gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev) +{ + Query *query = gnc_ledger_display_get_query( gsr->ledger ); + qof_query_set_sort_increasing (query, rev, rev, rev); + gnc_ledger_display_refresh( gsr->ledger ); +} + void gnc_split_reg_handle_exchange_cb (GtkWidget *w, gpointer data) { @@ -2112,6 +2122,7 @@ gnc_split_reg_set_sort_type_force( GNCSplitReg *gsr, SortType t, gboolean force gnc_split_reg_sort_force( gsr, t, force ); } + GtkWidget* gnc_split_reg_get_summarybar( GNCSplitReg *gsr ) { diff --git a/src/gnome/gnc-split-reg.h b/src/gnome/gnc-split-reg.h index 5a627a54a82..e9e8bce50e2 100644 --- a/src/gnome/gnc-split-reg.h +++ b/src/gnome/gnc-split-reg.h @@ -192,6 +192,12 @@ SortType gnc_split_reg_get_sort_type( GNCSplitReg *gsr ); void gnc_split_reg_set_sort_type( GNCSplitReg *gsr, SortType t ); void gnc_split_reg_set_sort_type_force( GNCSplitReg *gsr, SortType t, gboolean force); +/** + * Set/get sort order of register + **/ +void gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev); + + /** * Gets/sets the style of the GNCSplitReg. **/ diff --git a/src/gnome/gtkbuilder/gnc-plugin-page-register.glade b/src/gnome/gtkbuilder/gnc-plugin-page-register.glade index f45518a9c66..6f8aa0785f7 100644 --- a/src/gnome/gtkbuilder/gnc-plugin-page-register.glade +++ b/src/gnome/gtkbuilder/gnc-plugin-page-register.glade @@ -1,7 +1,6 @@ - + - True False @@ -11,12 +10,12 @@ True dialog - + True False 6 - + True False end @@ -214,12 +213,12 @@ dialog - + True False 6 - + True False end @@ -789,12 +788,12 @@ dialog - + True False 6 - + True False end @@ -1090,6 +1089,23 @@ 0 + + + Reverse Order + True + True + False + False + 0 + True + + + + True + True + 1 + + True @@ -1121,12 +1137,12 @@ center-on-parent dialog - + True False 6 - + True False end @@ -1196,8 +1212,6 @@ True False False - True - True False