r21499 - gnucash/trunk/src - Bug #420342 - remember register filter and ordering settings

Geert Janssens gjanssens at code.gnucash.org
Fri Oct 28 08:26:58 EDT 2011


Author: gjanssens
Date: 2011-10-28 08:26:58 -0400 (Fri, 28 Oct 2011)
New Revision: 21499
Trac: http://svn.gnucash.org/trac/changeset/21499

Modified:
   gnucash/trunk/src/engine/Account.c
   gnucash/trunk/src/engine/Account.h
   gnucash/trunk/src/gnome/gnc-plugin-page-register.c
   gnucash/trunk/src/gnome/gtkbuilder/gnc-plugin-page-register.glade
Log:
Bug #420342 - remember register filter and ordering settings
Patch by Robert Fewell

Modified: gnucash/trunk/src/engine/Account.c
===================================================================
--- gnucash/trunk/src/engine/Account.c	2011-10-28 12:26:49 UTC (rev 21498)
+++ gnucash/trunk/src/engine/Account.c	2011-10-28 12:26:58 UTC (rev 21499)
@@ -85,6 +85,7 @@
     PROP_HIDDEN,
     PROP_PLACEHOLDER,
     PROP_FILTER,
+    PROP_SORT_ORDER,
 };
 
 typedef struct AccountPrivate
@@ -439,6 +440,9 @@
     case PROP_FILTER:
         g_value_set_string(value, xaccAccountGetFilter(account));
         break;
+    case PROP_SORT_ORDER:
+        g_value_set_string(value, xaccAccountGetSortOrder(account));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -534,6 +538,9 @@
     case PROP_FILTER:
         xaccAccountSetFilter(account, g_value_get_string(value));
         break;
+    case PROP_SORT_ORDER:
+        xaccAccountSetSortOrder(account, g_value_get_string(value));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
         break;
@@ -881,6 +888,16 @@
                           "filters to be recalled.",
                           NULL,
                           G_PARAM_READWRITE));
+
+    g_object_class_install_property
+    (gobject_class,
+     PROP_SORT_ORDER,
+     g_param_spec_string ("sort-order",
+                          "Account Sort Order",
+                          "The account sort order is a value saved to allow "
+                          "the sort order to be recalled.",
+                          NULL,
+                          G_PARAM_READWRITE));
 }
 
 static void
@@ -2237,7 +2254,27 @@
     xaccAccountCommitEdit(acc);
 }
 
+void
+xaccAccountSetSortOrder (Account *acc, const char *str)
+{
+    g_return_if_fail(GNC_IS_ACCOUNT(acc));
 
+    xaccAccountBeginEdit(acc);
+    if (str)
+    {
+        gchar *tmp = g_strstrip(g_strdup(str));
+        kvp_frame_set_slot_nc(acc->inst.kvp_data, "sort-order",
+                              strlen(tmp) ? kvp_value_new_string(tmp) : NULL);
+        g_free(tmp);
+    }
+    else
+    {
+        kvp_frame_set_slot_nc(acc->inst.kvp_data, "sort-order", NULL);
+    }
+    mark_account (acc);
+    xaccAccountCommitEdit(acc);
+}
+
 static void
 qofAccountSetParent (Account *acc, QofInstance *parent)
 {
@@ -3025,6 +3062,12 @@
     return acc ? kvp_frame_get_string(acc->inst.kvp_data, "filter") : NULL;
 }
 
+const char *
+xaccAccountGetSortOrder (const Account *acc)
+{
+    g_return_val_if_fail(GNC_IS_ACCOUNT(acc), 0);
+    return acc ? kvp_frame_get_string(acc->inst.kvp_data, "sort-order") : NULL;
+}
 
 const char *
 xaccAccountGetNotes (const Account *acc)
@@ -4863,6 +4906,11 @@
             (QofSetterFunc) xaccAccountSetFilter
         },
         {
+            ACCOUNT_SORT_ORDER_, QOF_TYPE_STRING,
+            (QofAccessFunc) xaccAccountGetSortOrder,
+            (QofSetterFunc) xaccAccountSetSortOrder
+        },
+        {
             ACCOUNT_NOTES_, QOF_TYPE_STRING,
             (QofAccessFunc) xaccAccountGetNotes,
             (QofSetterFunc) xaccAccountSetNotes

Modified: gnucash/trunk/src/engine/Account.h
===================================================================
--- gnucash/trunk/src/engine/Account.h	2011-10-28 12:26:49 UTC (rev 21498)
+++ gnucash/trunk/src/engine/Account.h	2011-10-28 12:26:58 UTC (rev 21499)
@@ -289,6 +289,8 @@
 void xaccAccountSetColor (Account *account, const char *color);
 /** Set the account's Filter */
 void xaccAccountSetFilter (Account *account, const char *filter);
+/** Set the account's Sort Order */
+void xaccAccountSetSortOrder (Account *account, const char *sortorder);
 /** Set the account's notes */
 void xaccAccountSetNotes (Account *account, const char *notes);
 /** Set the last num field of an Account */
@@ -388,6 +390,8 @@
 const char * xaccAccountGetColor (const Account *account);
 /** Get the account's filter */
 const char * xaccAccountGetFilter (const Account *account);
+/** Get the account's Sort Order */
+const char * xaccAccountGetSortOrder (const Account *account);
 /** Get the account's notes */
 const char * xaccAccountGetNotes (const Account *account);
 /** Get the last num field of an Account */
@@ -1440,6 +1444,7 @@
 #define ACCOUNT_DESCRIPTION_	"desc"
 #define ACCOUNT_COLOR_		"color"
 #define ACCOUNT_FILTER_		"filter"
+#define ACCOUNT_SORT_ORDER_	"sort-order"
 #define ACCOUNT_NOTES_		"notes"
 #define ACCOUNT_BALANCE_	"balance"
 #define ACCOUNT_CLEARED_	"cleared"

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-register.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-register.c	2011-10-28 12:26:49 UTC (rev 21498)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-register.c	2011-10-28 12:26:58 UTC (rev 21499)
@@ -104,7 +104,11 @@
 /* Callbacks for the "Sort By" dialog */
 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);
 
+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);
+
 /* Callbacks for the "Filter By" dialog */
 void gnc_plugin_page_register_filter_select_range_cb(GtkRadioButton *button, GncPluginPageRegister *page);
 void gnc_plugin_page_register_filter_start_cb(GtkWidget *radio, GncPluginPageRegister *page);
@@ -114,9 +118,13 @@
 void gnc_plugin_page_register_filter_status_one_cb(GtkToggleButton *button, GncPluginPageRegister *page);
 void gnc_plugin_page_register_filter_save_cb(GtkToggleButton *button, GncPluginPageRegister *page);
 
+static time_t gnc_plugin_page_register_filter_dmy2time (char *date_string);
+static gchar *gnc_plugin_page_register_filter_time2dmy (time_t raw_time);
 static gchar *gnc_plugin_page_register_get_filter (GncPluginPage *plugin_page);
-void gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter );
+void gnc_plugin_page_register_set_filter (GncPluginPage *plugin_page, const gchar *filter);
+
 static void gnc_ppr_update_status_query (GncPluginPageRegister *page);
+static void gnc_ppr_update_date_query (GncPluginPageRegister *page);
 
 /* Command callbacks */
 static void gnc_plugin_page_register_cmd_print_check (GtkAction *action, GncPluginPageRegister *plugin_page);
@@ -450,8 +458,10 @@
     { "filter_status_unreconciled", CLEARED_NO, NULL },
     { NULL, 0, NULL },
 };
+
 #define CLEARED_VALUE "cleared_value"
 #define DEFAULT_FILTER "0x001f"
+#define DEFAULT_SORT_ORDER "BY_STANDARD"
 
 /************************************************************/
 /*                      Data Structures                     */
@@ -475,6 +485,8 @@
     {
         GtkWidget *dialog;
         SortType original_sort_type;
+        gboolean original_save_order;
+        gboolean save_order;
     } sd;
 
     struct
@@ -493,7 +505,8 @@
         time_t original_end_time;
         time_t start_time;
         time_t end_time;
-        gboolean save_it;
+        gboolean original_save_filter;
+        gboolean save_filter;
     } fd;
 } GncPluginPageRegisterPrivate;
 
@@ -546,7 +559,6 @@
     GList *book_list;
     gchar *label;
     gchar *label_color;
-    gchar *filter;
     QofQuery *q;
 
     /* Is there an existing page? */
@@ -581,10 +593,6 @@
     gnc_plugin_page_set_page_long_name(plugin_page, label);
     g_free(label);
 
-    filter = gnc_plugin_page_register_get_filter(plugin_page);
-    priv->fd.cleared_match = (gint)g_ascii_strtoll( filter, NULL, 16 );
-    g_free(filter);
-
     q = gnc_ledger_display_get_query (ledger);
     book_list = qof_query_get_books (q);
     for (item = book_list; item; item = g_list_next(item))
@@ -593,8 +601,8 @@
 
     reg = gnc_ledger_display_get_split_register(priv->ledger);
 
-    gnc_ppr_update_status_query (register_page);
 
+
     priv->component_manager_id = 0;
     return plugin_page;
 }
@@ -831,6 +839,9 @@
     GtkWidget *gsr;
     SplitRegister *reg;
     Account *acct;
+    gchar **filter;
+    gchar *order;
+    int filter_changed = 0;
 
     ENTER("page %p", plugin_page);
     page = GNC_PLUGIN_PAGE_REGISTER (plugin_page);
@@ -867,6 +878,60 @@
     gnc_plugin_page_register_ui_initial_state (page);
     gnc_plugin_page_register_ui_update (NULL, page);
 
+    /* Set the sort order for the split register and status of save order button */
+    priv->sd.save_order = FALSE;
+    order = gnc_plugin_page_register_get_sort_order(plugin_page);
+
+    PINFO("Loaded Sort order is %s", order);
+
+    gnc_split_reg_set_sort_type(priv->gsr, SortTypefromString(order));
+
+    if(strcmp(order, DEFAULT_SORT_ORDER) != 0)
+        priv->sd.save_order = TRUE;
+
+    priv->sd.original_save_order = priv->sd.save_order;
+    g_free(order);
+
+    /* Set the filter for the split register and status of save filter button */
+    priv->fd.save_filter = FALSE;
+
+    filter = g_strsplit(gnc_plugin_page_register_get_filter(plugin_page),",",-1);
+
+    PINFO("Loaded Filter Status is %s", filter[0]);
+
+    priv->fd.cleared_match = (gint)g_ascii_strtoll( filter[0], NULL, 16 );
+
+    if(strcmp(filter[0], DEFAULT_FILTER) != 0)
+	filter_changed = filter_changed + 1;
+
+    if (strcmp(filter[1],"0") != 0 )
+    {
+        PINFO("Loaded Filter Start Date is %s", filter[1]);
+
+        priv->fd.start_time = gnc_plugin_page_register_filter_dmy2time( filter[1] );
+        priv->fd.start_time = gnc_timet_get_day_start(priv->fd.start_time);
+	filter_changed = filter_changed + 1;
+    }
+
+    if (strcmp(filter[2],"0") != 0 )
+    {
+        PINFO("Loaded Filter End Date is %s", filter[2]);
+
+        priv->fd.end_time = gnc_plugin_page_register_filter_dmy2time( filter[2] );
+        priv->fd.end_time = gnc_timet_get_day_end(priv->fd.end_time);
+	filter_changed = filter_changed + 1;
+    }
+
+    if(filter_changed != 0)
+        priv->fd.save_filter = TRUE;
+
+    priv->fd.original_save_filter = priv->fd.save_filter;
+    g_strfreev(filter);
+
+    /* Update Query with Filter Status and Dates */
+    gnc_ppr_update_status_query (page);
+    gnc_ppr_update_date_query(page);
+
     plugin_page->summarybar = gsr_create_summary_bar(priv->gsr);
     if (plugin_page->summarybar)
     {
@@ -1357,6 +1422,7 @@
     SplitRegister *reg;
     Account *leader;
     const char* filter;
+    gchar *default_filter;
 
     g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown"));
 
@@ -1370,7 +1436,9 @@
     if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
         filter = xaccAccountGetFilter (leader);
 
-    return g_strdup(filter ? filter : DEFAULT_FILTER);
+    default_filter = g_strdup_printf("%s,%s,%s", DEFAULT_FILTER, "0", "0");
+
+    return g_strdup(filter ? filter : default_filter);
 }
 
 void
@@ -1381,6 +1449,7 @@
     GNCLedgerDisplay *ld;
     SplitRegister *reg;
     Account *leader;
+    gchar *default_filter;
 
     priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
     ld = priv->ledger;
@@ -1388,12 +1457,65 @@
     ledger_type = gnc_ledger_display_type (ld);
     leader = gnc_ledger_display_leader (ld);
 
-    xaccAccountSetFilter (leader, filter);
+    default_filter = g_strdup_printf("%s,%s,%s", DEFAULT_FILTER, "0", "0");
 
+    if(strcmp(filter, default_filter) == 0)
+        xaccAccountSetFilter (leader, NULL);
+    else
+        xaccAccountSetFilter (leader, filter);
+
     return;
 }
 
 static gchar *
+gnc_plugin_page_register_get_sort_order (GncPluginPage *plugin_page)
+{
+    GncPluginPageRegisterPrivate *priv;
+    GNCLedgerDisplayType ledger_type;
+    GNCLedgerDisplay *ld;
+    SplitRegister *reg;
+    Account *leader;
+    const char* sort_order;
+
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown"));
+
+    priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
+    ld = priv->ledger;
+    reg = gnc_ledger_display_get_split_register (ld);
+    ledger_type = gnc_ledger_display_type (ld);
+    leader = gnc_ledger_display_leader (ld);
+    sort_order = NULL;
+
+    if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
+        sort_order = xaccAccountGetSortOrder (leader);
+
+    return g_strdup(sort_order ? sort_order : DEFAULT_SORT_ORDER);
+}
+
+void
+gnc_plugin_page_register_set_sort_order (GncPluginPage *plugin_page, const gchar *sort_order )
+{
+    GncPluginPageRegisterPrivate *priv;
+    GNCLedgerDisplayType ledger_type;
+    GNCLedgerDisplay *ld;
+    SplitRegister *reg;
+    Account *leader;
+
+    priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
+    ld = priv->ledger;
+    reg = gnc_ledger_display_get_split_register (ld);
+    ledger_type = gnc_ledger_display_type (ld);
+    leader = gnc_ledger_display_leader (ld);
+
+    if(strcmp(sort_order, DEFAULT_SORT_ORDER) == 0)
+        xaccAccountSetSortOrder (leader, NULL);
+    else
+        xaccAccountSetSortOrder (leader, sort_order);
+
+    return;
+}
+
+static gchar *
 gnc_plugin_page_register_get_long_name (GncPluginPage *plugin_page)
 {
     GncPluginPageRegisterPrivate *priv;
@@ -1481,17 +1603,36 @@
         GncPluginPageRegister *page)
 {
     GncPluginPageRegisterPrivate *priv;
+    GncPluginPage *plugin_page;
+    SortType type;
+    const gchar *order;
 
     g_return_if_fail(GTK_IS_DIALOG(dialog));
     g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(page));
 
     ENTER(" ");
     priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(page);
+    plugin_page = GNC_PLUGIN_PAGE(page);
+
     if (response != GTK_RESPONSE_OK)
     {
         /* Restore the original sort order */
         gnc_split_reg_set_sort_type(priv->gsr, priv->sd.original_sort_type);
+	priv->sd.save_order = priv->sd.original_save_order;
     }
+    else
+    {
+        priv->sd.original_save_order = priv->sd.save_order;
+
+        if(priv->sd.save_order)
+	{
+            type = gnc_split_reg_get_sort_type(priv->gsr);
+            order = SortTypeasString(type);
+            gnc_plugin_page_register_set_sort_order (plugin_page, g_strdup_printf("%s", order));
+	}
+        else
+            gnc_plugin_page_register_set_sort_order (plugin_page, g_strdup_printf("%s", DEFAULT_SORT_ORDER));
+    }
     priv->sd.dialog = NULL;
     gtk_widget_destroy(GTK_WIDGET(dialog));
     LEAVE(" ");
@@ -1525,6 +1666,37 @@
     LEAVE(" ");
 }
 
+
+/** This function is called whenever the save sort order is checked
+ *  or unchecked which allows saving 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_save_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("Save 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))
+        priv->sd.save_order = TRUE;
+    else
+        priv->sd.save_order = FALSE;
+    LEAVE(" ");
+}
+
+
 /************************************************************/
 /*                    "Filter By" Dialog                    */
 /************************************************************/
@@ -1630,6 +1802,46 @@
 }
 
 
+/* This function converts a time_t value date to a string */
+static gchar *
+gnc_plugin_page_register_filter_time2dmy ( time_t raw_time)
+{
+    struct tm * timeinfo;
+    gchar date_string[11];
+    gint i;
+
+    timeinfo = localtime ( &raw_time );
+    i= strftime(date_string,11,"%d-%m-%Y", timeinfo );
+    PINFO("Date string is %s", date_string);
+
+    return g_strdup(date_string);
+}
+
+
+/* This function converts a string date to a time_t value */
+static time_t
+gnc_plugin_page_register_filter_dmy2time ( char *date_string)
+{
+    struct tm *when;
+    gint yy=0, mm=0, dd=0;
+
+    time_t raw_time;
+
+    PINFO("Date string is %s", date_string);
+
+    sscanf(date_string, "%d-%d-%d", &dd, &mm, &yy );
+
+    time(&raw_time);
+    when = localtime ( &raw_time );
+
+    when->tm_year = yy - 1900;
+    when->tm_mon = mm -1 ;
+    when->tm_mday = dd;
+
+    return mktime(when);
+}
+
+
 /** This function is called whenever one of the status entries is
  *  checked or unchecked.  It updates the status value maintained for
  *  the filter dialog, and calls another function to do the work of
@@ -1719,7 +1931,7 @@
  *  filter by examining the dialog widgets to see which ones are
  *  selected, and will pull times out of the data entry boxes if
  *  necessary.  This function must exist to handle the case where the
- *  "show all" button was Seleucid, and the user clicks on the "select
+ *  "show all" button was Selected, and the user clicks on the "select
  *  range" button.  Since it exists, it make sense for the rest of the
  *  callbacks to take advantage of it.
  *
@@ -1739,6 +1951,7 @@
         time_val = gnc_date_edit_get_date(GNC_DATE_EDIT(priv->fd.start_date));
         time_val = gnc_timet_get_day_start(time_val);
         priv->fd.start_time = time_val;
+
     }
     else
     {
@@ -1945,8 +2158,6 @@
         GncPluginPageRegister *page)
 {
     GncPluginPageRegisterPrivate *priv;
-    const gchar *name;
-    gint i, value;
 
     g_return_if_fail(GTK_IS_CHECK_BUTTON(button));
     g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(page));
@@ -1956,9 +2167,9 @@
     /* Compute the new save filter status */
     priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(page);
     if (gtk_toggle_button_get_active(button))
-        priv->fd.save_it = TRUE;
+        priv->fd.save_filter = TRUE;
     else
-        priv->fd.save_it = FALSE;
+        priv->fd.save_filter = FALSE;
     LEAVE(" ");
 }
 
@@ -1981,7 +2192,7 @@
 {
     GncPluginPageRegisterPrivate *priv;
     GncPluginPage *plugin_page;
-    const char* filter;
+    const char* filter; 
 
     g_return_if_fail(GTK_IS_DIALOG(dialog));
     g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(page));
@@ -1997,15 +2208,33 @@
         gnc_ppr_update_status_query(page);
         priv->fd.start_time = priv->fd.original_start_time;
         priv->fd.end_time = priv->fd.original_end_time;
+	priv->fd.save_filter = priv->fd.original_save_filter;
         gnc_ppr_update_date_query(page);
     }
     else
     {
-        if (priv->fd.save_it)
-        {
+        priv->fd.original_save_filter = priv->fd.save_filter;
+
+        if(priv->fd.save_filter)
+	{
             filter = g_strdup_printf("0x%04x", priv->fd.cleared_match);
+
+            if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->fd.start_date_choose)) && priv->fd.start_time != 0 )
+                filter = g_strconcat ( filter, ",", gnc_plugin_page_register_filter_time2dmy(priv->fd.start_time) , NULL);
+            else
+                filter = g_strconcat ( filter, ",0", NULL);
+
+            if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->fd.end_date_choose)) && priv->fd.end_time != 0 )
+                filter = g_strconcat ( filter, ",", gnc_plugin_page_register_filter_time2dmy(priv->fd.end_time) , NULL);
+            else
+                filter = g_strconcat ( filter, ",0", NULL);
+
+            PINFO("The filter to save is %s",filter);
+
             gnc_plugin_page_register_set_filter (plugin_page, filter);
-        }
+	}
+        else
+            gnc_plugin_page_register_set_filter (plugin_page, g_strdup_printf("%s,%s,%s", DEFAULT_FILTER,"0","0"));
     }
     priv->fd.dialog = NULL;
     gtk_widget_destroy(GTK_WIDGET(dialog));
@@ -2412,7 +2641,7 @@
         return;
 
     builder = gtk_builder_new();
-    gnc_builder_add_from_file  (builder , "gnc-plugin-page-register.glade", "Void Transaction");
+    gnc_builder_add_from_file  (builder ,"gnc-plugin-page-register.glade", "Void Transaction");
     dialog = GTK_WIDGET(gtk_builder_get_object (builder, "Void Transaction"));
     entry = GTK_WIDGET(gtk_builder_get_object (builder, "reason"));
 
@@ -2568,6 +2797,10 @@
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
     priv->sd.original_sort_type = sort;
 
+    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);
+
     /* Wire it up */
     gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, page);
 
@@ -2620,12 +2853,16 @@
     {
         toggle = GTK_WIDGET(gtk_builder_get_object (builder, status_actions[i].action_name));
         value = priv->fd.cleared_match & status_actions[i].value;
-        status_actions[i].widget = toggle;
+	status_actions[i].widget = toggle;
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), value);
     }
     priv->fd.original_cleared_match = priv->fd.cleared_match;
-    priv->fd.save_it = FALSE;
 
+    button = GTK_WIDGET(gtk_builder_get_object (builder, "filter_save"));
+    if(priv->fd.save_filter == TRUE)
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+
+
     /* Set the date info */
     button = GTK_WIDGET(gtk_builder_get_object (builder, "filter_show_range"));
     query = gnc_ledger_display_get_query (priv->ledger);

Modified: gnucash/trunk/src/gnome/gtkbuilder/gnc-plugin-page-register.glade
===================================================================
--- gnucash/trunk/src/gnome/gtkbuilder/gnc-plugin-page-register.glade	2011-10-28 12:26:49 UTC (rev 21498)
+++ gnucash/trunk/src/gnome/gtkbuilder/gnc-plugin-page-register.glade	2011-10-28 12:26:58 UTC (rev 21499)
@@ -683,37 +683,6 @@
                     <property name="position">0</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkHBox" id="hbox1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <child>
-                      <object class="GtkCheckButton" id="filter_save">
-                        <property name="label" translatable="yes">_Save Filter Status</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="use_action_appearance">False</property>
-                        <property name="use_underline">True</property>
-                        <property name="xalign">1</property>
-                        <property name="draw_indicator">True</property>
-                        <signal name="toggled" handler="gnc_plugin_page_register_filter_save_cb" swapped="no"/>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="padding">6</property>
-                        <property name="pack_type">end</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
               </object>
               <packing>
                 <property name="position">1</property>
@@ -735,6 +704,37 @@
           <packing>
             <property name="expand">True</property>
             <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkCheckButton" id="filter_save">
+                <property name="label" translatable="yes">Sa_ve Filter</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_underline">True</property>
+                <property name="xalign">1</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="gnc_plugin_page_register_filter_save_cb" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">6</property>
+                <property name="pack_type">end</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">False</property>
             <property name="position">2</property>
           </packing>
         </child>
@@ -1010,6 +1010,59 @@
                 <property name="position">10</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkHSeparator" id="hseparator1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkCheckButton" id="sort_save">
+                    <property name="label" translatable="yes">Sa_ve Sort Order</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">1</property>
+                    <property name="draw_indicator">True</property>
+                    <signal name="toggled" handler="gnc_plugin_page_register_sort_order_save_cb" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="padding">6</property>
+                    <property name="pack_type">end</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">False</property>
+                <property name="position">14</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">True</property>



More information about the gnucash-changes mailing list