gnucash stable: Multiple changes pushed
Robert Fewell
bobit at code.gnucash.org
Thu Jun 11 06:53:53 EDT 2026
Updated via https://github.com/Gnucash/gnucash/commit/8f10b4f8 (commit)
via https://github.com/Gnucash/gnucash/commit/eb96f8e7 (commit)
via https://github.com/Gnucash/gnucash/commit/a135c257 (commit)
via https://github.com/Gnucash/gnucash/commit/35822232 (commit)
via https://github.com/Gnucash/gnucash/commit/a780cd1a (commit)
via https://github.com/Gnucash/gnucash/commit/cdbd06b1 (commit)
via https://github.com/Gnucash/gnucash/commit/e7ae7710 (commit)
from https://github.com/Gnucash/gnucash/commit/13112ab8 (commit)
commit 8f10b4f864c59d4ab00b909f21802d4b83ff7bde
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jun 7 10:29:12 2026 +0100
Couple of spelling errors in gnc-accounting-period
diff --git a/libgnucash/engine/gnc-accounting-period.c b/libgnucash/engine/gnc-accounting-period.c
index 9ac1c5e133..2a6e3d4b28 100644
--- a/libgnucash/engine/gnc-accounting-period.c
+++ b/libgnucash/engine/gnc-accounting-period.c
@@ -188,7 +188,7 @@ gnc_accounting_period_start_gdate (GncAccountingPeriod which,
case GNC_ACCOUNTING_PERIOD_FYEAR:
if (fy_end == NULL)
{
- PINFO ("Request for fisal year value but no fiscal year end value provided.");
+ PINFO ("Request for fiscal year value but no fiscal year end value provided.");
g_date_free (date);
return NULL;
}
@@ -198,7 +198,7 @@ gnc_accounting_period_start_gdate (GncAccountingPeriod which,
case GNC_ACCOUNTING_PERIOD_FYEAR_PREV:
if (fy_end == NULL)
{
- PINFO ("Request for fisal year value but no fiscal year end value provided.");
+ PINFO ("Request for fiscal year value but no fiscal year end value provided.");
g_date_free (date);
return NULL;
}
commit eb96f8e7f2002fd497ebff22445a2cdbe17e322c
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jun 7 10:28:34 2026 +0100
Fix fiscal year end use in gnc-period-select
When saving the 'fy_end' date in the GncPeriodSelect widget the year
was being saved as G_DATE_BAD_YEAR. In doing so, the month and day when
retrieved will be 0. If the year is set separately with g_date_set_year
and G_DATE_BAD_YEAR is used the following error is logged...
ERROR <GLib> g_date_set_year: assertion 'g_date_valid_year (y)' failed
So to fix this just copy the incoming 'fy_end' GDate.
diff --git a/gnucash/gnome-utils/gnc-period-select.c b/gnucash/gnome-utils/gnc-period-select.c
index 1d5b8be645..98708d2b27 100644
--- a/gnucash/gnome-utils/gnc-period-select.c
+++ b/gnucash/gnome-utils/gnc-period-select.c
@@ -270,9 +270,7 @@ gnc_period_select_set_fy_end (GncPeriodSelect *period, const GDate *fy_end)
if (fy_end)
{
- period->fy_end = g_date_new_dmy(g_date_get_day(fy_end),
- g_date_get_month(fy_end),
- G_DATE_BAD_YEAR);
+ period->fy_end = g_date_copy (fy_end);
}
else
{
commit a135c2575859baa45b02b01c554a84972a3cfff1
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jun 7 10:27:59 2026 +0100
Remove left over code in dialog-preferences.
Code for use of 'fy_end' was disabled so lets remove it to avoid any
confusion when fiscal year handling is added.
diff --git a/gnucash/gnome-utils/dialog-preferences.c b/gnucash/gnome-utils/dialog-preferences.c
index 1d8076704c..c7a8d0b27e 100644
--- a/gnucash/gnome-utils/dialog-preferences.c
+++ b/gnucash/gnome-utils/dialog-preferences.c
@@ -1349,8 +1349,6 @@ gnc_preferences_dialog_create (GtkWindow *parent)
GtkTreeIter iter;
gnc_commodity *locale_currency;
const gchar *currency_name;
- GDate fy_end;
- gboolean date_is_valid = FALSE;
ENTER("");
DEBUG("Opening dialog-preferences.glade:");
@@ -1406,30 +1404,17 @@ gnc_preferences_dialog_create (GtkWindow *parent)
g_object_set_data_full (G_OBJECT(dialog), PREFS_WIDGET_HASH,
prefs_table, (GDestroyNotify)g_hash_table_destroy);
-
- if (gnc_current_session_exist())
- {
- QofBook *book = gnc_get_current_book ();
- g_date_clear (&fy_end, 1);
- qof_instance_get (QOF_INSTANCE(book),
- "fy-end", &fy_end,
- NULL);
- }
box = GTK_WIDGET(gtk_builder_get_object (builder,
"pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_PERIOD));
period = gnc_period_select_new (TRUE);
gtk_widget_show (period);
gtk_box_pack_start (GTK_BOX(box), period, TRUE, TRUE, 0);
- if (date_is_valid)
- gnc_period_select_set_fy_end (GNC_PERIOD_SELECT(period), &fy_end);
box = GTK_WIDGET(gtk_builder_get_object (builder,
"pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_END_PERIOD));
period = gnc_period_select_new (FALSE);
gtk_widget_show (period);
gtk_box_pack_start (GTK_BOX(box), period, TRUE, TRUE, 0);
- if (date_is_valid)
- gnc_period_select_set_fy_end (GNC_PERIOD_SELECT(period), &fy_end);
box = GTK_WIDGET(gtk_builder_get_object (builder,
"pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_DATE));
commit 35822232ca40fc5680ea95dbbca7c1fb5092e6b8
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jun 7 10:22:31 2026 +0100
Bug 421610 - Include logical dates in View->Filter
Change the register filter option 'Today' radio button to be a period
select widget. This will give some predefined relative options that are
the same as in the Preference dialog.
diff --git a/gnucash/gnome/gnc-plugin-page-register-filter.cpp b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
index 2e84c12b8c..5ca2bd5672 100644
--- a/gnucash/gnome/gnc-plugin-page-register-filter.cpp
+++ b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
@@ -38,7 +38,9 @@
#include "gnc-date.h"
#include "gnc-date-edit.h"
#include "gnc-glib-utils.h"
+#include "gnc-ui.h"
#include "gnc-state.h"
+#include "gnc-period-select.h"
#include "gnc-prefs.h"
#include "gnc-ui-util.h"
#include "gnc-window.h"
@@ -70,21 +72,35 @@ struct RegisterFilterDialog
GncPluginPage* plugin_page;
GtkWidget* dialog;
GtkWidget* table;
- GtkWidget* start_date_choose;
- GtkWidget* start_date_today;
- GtkWidget* start_date;
- GtkWidget* end_date_choose;
- GtkWidget* end_date_today;
+ GtkWidget* start_earliest; //label
+ GtkWidget* start_relative_check; //checkbutton
+ GtkWidget* start_relative; //account period
+ GtkWidget* start_date_check; //checkbutton
+ GtkWidget* start_date; //date
+ GtkWidget* start_days_check; //checkbutton
+ GtkWidget* start_days; //spin
+
+ GtkWidget* end_latest;
+ GtkWidget* end_relative_check;
+ GtkWidget* end_relative;
+ GtkWidget* end_date_check;
GtkWidget* end_date;
- GtkWidget* num_days;
+ GtkWidget* end_days_check;
+ GtkWidget* end_days;
- cleared_match_t original_cleared_match;
- time64 original_start_time;
- time64 original_end_time;
- int original_days;
- bool original_save_filter;
+ GtkWidget* num_days;
- bool show_save_button;
+ cleared_match_t original_cleared_match;
+ GncAccountingPeriod original_start_ap;
+ time64 original_start_time;
+ int original_start_days;
+ GncAccountingPeriod original_end_ap;
+ time64 original_end_time;
+ int original_end_days;
+ int original_days;
+ bool original_save_filter;
+
+ bool show_save_button;
};
extern "C"
@@ -119,6 +135,15 @@ gnc_ppr_filter_save_cb (GtkToggleButton* button,
void
gnc_ppr_filter_days_changed_cb (GtkSpinButton* button,
RegisterFilterDialog* rfd);
+void
+gnc_ppr_filter_start_toggle_cb (GtkToggleButton* button,
+ RegisterFilterDialog* rfd);
+void
+gnc_ppr_filter_end_toggle_cb (GtkToggleButton* button,
+ RegisterFilterDialog* rfd);
+void
+gnc_ppr_filter_start_end_days_changed_cb (GtkSpinButton* button,
+ RegisterFilterDialog* rfd);
}
struct status_action
@@ -191,6 +216,25 @@ ppr_filter_dmy2time (std::string date_string)
return gnc_mktime (&when);
}
+/* This function subtracts a number of days from now to a time64 value */
+static time64
+get_time_for_days_ago (int days, bool use_day_start)
+{
+ time64 time_val = 0;
+
+ if (days > 0)
+ {
+ struct tm tm;
+ if (use_day_start)
+ gnc_tm_get_today_start (&tm);
+ else
+ gnc_tm_get_today_end (&tm);
+ tm.tm_mday = tm.tm_mday - days;
+ time_val = gnc_mktime (&tm);
+ }
+ return time_val;
+}
+
static std::vector<std::string>
split_filter_by_delimiter (std::string str, char delimiter)
{
@@ -245,19 +289,96 @@ ppr_filter_load_filter (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type)
}
static void
-set_filterdata_to_defaults (FilterData *fd)
+set_filterdata_to_defaults (FilterData *fd, bool date_parts_only)
{
- fd->cleared_match = (cleared_match_t)std::stol (DEFAULT_FILTER, nullptr, 16);
+ if (!date_parts_only)
+ {
+ fd->cleared_match = (cleared_match_t)std::stol (DEFAULT_FILTER, nullptr, 16);
+ fd->save_filter = false;
+ }
+ fd->start_ap = GNC_ACCOUNTING_PERIOD_INVALID;
fd->start_time = 0;
+ fd->start_days = 0;
+ fd->end_ap = GNC_ACCOUNTING_PERIOD_INVALID;
fd->end_time = 0;
+ fd->end_days = 0;
fd->days = 0;
- fd->save_filter = false;
+}
+
+static int
+get_trailing_int (const std::string split_filter, const std::string find_text)
+{
+ int ret_int = -1;
+ std::size_t found = split_filter.find (find_text);
+
+ if (found != std::string::npos)
+ {
+ std::string found_str = split_filter.substr (found + find_text.length(), std::string::npos);
+ ret_int = std::stol (found_str, nullptr, 10);
+ }
+ return ret_int;
+}
+
+static void
+update_fd_with_date_filter_parts (FilterData *fd, const std::string filter_part,
+ bool start_filter, int ap_trailing_int, int days_trailing_int)
+{
+ if (ap_trailing_int != -1)
+ {
+ GDate *tmp_date = nullptr;
+
+ if (start_filter)
+ {
+ fd->start_ap = (GncAccountingPeriod)ap_trailing_int;
+ tmp_date = gnc_accounting_period_start_gdate (fd->start_ap, nullptr, nullptr);
+ }
+ else
+ {
+ fd->end_ap = (GncAccountingPeriod)ap_trailing_int;
+ tmp_date = gnc_accounting_period_end_gdate (fd->end_ap, nullptr, nullptr);
+ }
+
+ if (tmp_date)
+ {
+ if (start_filter)
+ fd->start_time = gnc_time64_get_day_start_gdate (tmp_date);
+ else
+ fd->end_time = gnc_time64_get_day_end_gdate (tmp_date);
+
+ g_date_free (tmp_date);
+ }
+ }
+ else
+ {
+ if (days_trailing_int != -1)
+ {
+ if (start_filter)
+ {
+ fd->start_days = days_trailing_int;
+ fd->start_time = get_time_for_days_ago (fd->start_days, true);
+ }
+ else
+ {
+ fd->end_days = days_trailing_int;
+ fd->end_time = get_time_for_days_ago (fd->end_days, false);
+ }
+ }
+ else
+ {
+ time64 tmp_time = ppr_filter_dmy2time (filter_part);
+ if (start_filter)
+ fd->start_time = gnc_time64_get_day_start (tmp_time);
+ else
+ fd->end_time = gnc_time64_get_day_end (tmp_time);
+ }
+ }
+ fd->save_filter = true;
}
static void
ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type, FilterData *fd)
{
- set_filterdata_to_defaults (fd);
+ set_filterdata_to_defaults (fd, false);
fd->dialog = nullptr;
if (!gsr)
@@ -282,18 +403,20 @@ ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type
{
PINFO("Loaded Filter Start Date is %s", split_filter[1].c_str());
- fd->start_time = ppr_filter_dmy2time (split_filter[1]);
- fd->start_time = gnc_time64_get_day_start (fd->start_time);
- fd->save_filter = true;
+ int ap_trailing_int = get_trailing_int (split_filter[1], "SAP");
+ int days_trailing_int = get_trailing_int (split_filter[1], "SDAY");
+
+ update_fd_with_date_filter_parts (fd, split_filter[1], true, ap_trailing_int, days_trailing_int);
}
if (split_filter_size > 2 && (split_filter[2].compare (std::string ("0"))) != 0)
{
PINFO("Loaded Filter End Date is %s", split_filter[2].c_str());
- fd->end_time = ppr_filter_dmy2time (split_filter[2]);
- fd->end_time = gnc_time64_get_day_end (fd->end_time);
- fd->save_filter = true;
+ int ap_trailing_int = get_trailing_int (split_filter[2], "EAP");
+ int days_trailing_int = get_trailing_int (split_filter[1], "EDAY");
+
+ update_fd_with_date_filter_parts (fd, split_filter[2], false, ap_trailing_int, days_trailing_int);
}
// set the default for the number of days
@@ -356,18 +479,22 @@ ppr_filter_save_filter_parts (GNCSplitReg *gsr, FilterData *fd)
save_filter_str.append (buffer);
// start time
- if (fd->start_time != 0)
- {
+ if (fd->start_ap != GNC_ACCOUNTING_PERIOD_INVALID)
+ save_filter_str.append (";SAP" + std::to_string (fd->start_ap));
+ else if (fd->start_days > 0)
+ save_filter_str.append (";SDAY" + std::to_string (fd->start_days));
+ else if (fd->start_time != 0)
save_filter_str.append (";" + ppr_filter_time2dmy (fd->start_time));
- }
else
save_filter_str.append (";0");
// end time
- if (fd->end_time != 0)
- {
+ if (fd->end_ap != GNC_ACCOUNTING_PERIOD_INVALID)
+ save_filter_str.append (";EAP" + std::to_string (fd->end_ap));
+ else if (fd->end_days > 0)
+ save_filter_str.append (";EDAY" + std::to_string (fd->end_days));
+ else if (fd->end_time != 0)
save_filter_str.append (";" + ppr_filter_time2dmy (fd->end_time));
- }
else
save_filter_str.append (";0");
@@ -580,13 +707,7 @@ ppr_filter_update_date_query (GncPluginPage* plugin_page)
if (fd->days > 0)
{
- time64 start;
- struct tm tm;
-
- gnc_tm_get_today_start (&tm);
-
- tm.tm_mday = tm.tm_mday - fd->days;
- start = gnc_mktime (&tm);
+ time64 start = get_time_for_days_ago (fd->days, true);
xaccQueryAddDateMatchTT (query, TRUE, start, FALSE, 0, QOF_QUERY_AND);
}
@@ -610,7 +731,7 @@ gnc_ppr_filter_clear_current_filter (GncPluginPage* plugin_page)
auto fd = gnc_plugin_page_register_get_filter_data (plugin_page);
- set_filterdata_to_defaults (fd);
+ set_filterdata_to_defaults (fd, false);
ppr_filter_update_date_query (plugin_page);
}
@@ -643,7 +764,7 @@ gnc_ppr_filter_update_register (GncPluginPage* plugin_page)
SplitRegister *reg = gnc_ledger_display_get_split_register (gsr->ledger);
if (reg->type != GENERAL_JOURNAL) // search ledger and the like
- set_filterdata_to_defaults (fd);
+ set_filterdata_to_defaults (fd, false);
}
/* Update Query with Filter Status and Dates */
ppr_filter_update_status_query (plugin_page);
@@ -695,18 +816,49 @@ gnc_ppr_filter_status_one_cb (GtkToggleButton* button,
}
static void
-set_checkbutton_with_blocking (GtkWidget *widget,
+set_sensitive_start_widget (RegisterFilterDialog *rfd, GtkWidget *enable_widget, gboolean active)
+{
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->start_earliest), !active);
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->start_relative), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->start_date), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->start_days), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET(enable_widget), active);
+}
+
+static void
+set_sensitive_end_widget (RegisterFilterDialog *rfd, GtkWidget *enable_widget, gboolean active)
+{
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->end_latest), !active);
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->end_relative), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->end_date), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET(rfd->end_days), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET(enable_widget), active);
+}
+
+static void
+set_checkbutton_with_blocking (GtkWidget *widget1, GtkWidget *widget2,
GFunc function,
RegisterFilterDialog *rfd,
gboolean active)
{
PINFO("Block GtkToggleButton %p for setting active %s",
- widget, active ? "TRUE" : "FALSE");
- g_signal_handlers_block_by_func (widget,
+ widget1, active ? "TRUE" : "FALSE");
+ g_signal_handlers_block_by_func (widget1,
(gpointer)function, rfd);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget), active);
- g_signal_handlers_unblock_by_func (widget,
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget1), active);
+ g_signal_handlers_unblock_by_func (widget1,
(gpointer)function, rfd);
+
+ if (widget2)
+ {
+ PINFO("Block GtkToggleButton %p for setting active %s",
+ widget2, active ? "TRUE" : "FALSE");
+ g_signal_handlers_block_by_func (widget2,
+ (gpointer)function, rfd);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widget2), active);
+ g_signal_handlers_unblock_by_func (widget2,
+ (gpointer)function, rfd);
+ }
}
/** This function is called whenever the "select all" status button is
@@ -731,7 +883,7 @@ gnc_ppr_filter_status_select_all_cb (GtkButton* button,
/* Turn on all the check menu items */
for (const auto& action : status_actions)
{
- set_checkbutton_with_blocking (action.widget,
+ set_checkbutton_with_blocking (action.widget, nullptr,
(GFunc)gnc_ppr_filter_status_one_cb,
rfd, TRUE);
}
@@ -764,7 +916,7 @@ gnc_ppr_filter_status_clear_all_cb (GtkButton* button,
/* Turn off all the check menu items */
for (const auto& action : status_actions)
{
- set_checkbutton_with_blocking (action.widget,
+ set_checkbutton_with_blocking (action.widget, nullptr,
(GFunc)gnc_ppr_filter_status_one_cb,
rfd, FALSE);
}
@@ -775,6 +927,14 @@ gnc_ppr_filter_status_clear_all_cb (GtkButton* button,
LEAVE(" ");
}
+static void
+print_info_time64_date (const gchar *text, time64 date)
+{
+ gchar *date_txt = qof_print_date (date);
+ PINFO("%s, %s", text, date_txt);
+ g_free (date_txt);
+}
+
static void
get_filter_times (RegisterFilterDialog* rfd)
{
@@ -782,33 +942,55 @@ get_filter_times (RegisterFilterDialog* rfd)
auto fd = gnc_plugin_page_register_get_filter_data (rfd->plugin_page);
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->start_date_choose)))
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->start_date_check)))
{
time_val = gnc_date_edit_get_date (GNC_DATE_EDIT(rfd->start_date));
time_val = gnc_time64_get_day_start (time_val);
fd->start_time = time_val;
+ fd->start_ap = GNC_ACCOUNTING_PERIOD_INVALID;
+ print_info_time64_date ("Start date is", fd->start_time);
}
- else
+ else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->start_relative_check)))
{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->start_date_today)))
- fd->start_time = gnc_time64_get_today_start();
- else
- fd->start_time = 0;
+ auto *sdate = gnc_period_select_get_date (GNC_PERIOD_SELECT(rfd->start_relative));
+ fd->start_time = gnc_time64_get_day_start_gdate (sdate);
+ fd->start_ap = gnc_period_select_get_active (GNC_PERIOD_SELECT(rfd->start_relative));
+ print_info_time64_date ("Start date relative is", fd->start_time);
+ g_date_free (sdate);
}
+ else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->start_days_check)))
+ {
+ fd->start_time = get_time_for_days_ago (fd->start_days, true);
+ fd->start_ap = GNC_ACCOUNTING_PERIOD_INVALID;
+ print_info_time64_date ("Start date using days is", fd->start_time);
+ }
+ else
+ fd->start_time = 0;
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->end_date_choose)))
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->end_date_check)))
{
time_val = gnc_date_edit_get_date (GNC_DATE_EDIT(rfd->end_date));
time_val = gnc_time64_get_day_end (time_val);
fd->end_time = time_val;
+ fd->end_ap = GNC_ACCOUNTING_PERIOD_INVALID;
+ print_info_time64_date ("End date is", fd->end_time);
}
- else
+ else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->end_relative_check)))
{
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->end_date_today)))
- fd->end_time = gnc_time64_get_today_end();
- else
- fd->end_time = 0;
+ auto *edate = gnc_period_select_get_date (GNC_PERIOD_SELECT(rfd->end_relative));
+ fd->end_time = gnc_time64_get_day_end_gdate (edate);
+ fd->end_ap = gnc_period_select_get_active (GNC_PERIOD_SELECT(rfd->end_relative));
+ print_info_time64_date ("End date relative is", fd->end_time);
+ g_date_free (edate);
+ }
+ else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rfd->end_days_check)))
+ {
+ fd->end_time = get_time_for_days_ago (fd->end_days, false);
+ fd->end_ap = GNC_ACCOUNTING_PERIOD_INVALID;
+ print_info_time64_date ("End date using days is", fd->end_time);
}
+ else
+ fd->end_time = 0;
}
/** This function is called when the radio buttons changes state. This
@@ -851,9 +1033,7 @@ gnc_ppr_filter_select_range_cb (GtkRadioButton* button,
{
gtk_widget_set_sensitive (rfd->table, FALSE);
gtk_widget_set_sensitive (rfd->num_days, FALSE);
- fd->start_time = 0;
- fd->end_time = 0;
- fd->days = 0;
+ set_filterdata_to_defaults (fd, true);
}
ppr_filter_update_date_query (rfd->plugin_page);
LEAVE(" ");
@@ -986,6 +1166,169 @@ gnc_ppr_filter_end_cb (GtkWidget* radio,
LEAVE(" ");
}
+static void
+ppr_filter_relative_changed_cb (GtkWidget *widget,
+ RegisterFilterDialog* rfd)
+{
+ g_return_if_fail (GNC_IS_PERIOD_SELECT(widget));
+ g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER(rfd->plugin_page));
+
+ ENTER("Period Select (%p), active_id %d, plugin_page %p",
+ widget, gnc_period_select_get_active (GNC_PERIOD_SELECT(widget)),
+ rfd->plugin_page);
+
+ get_filter_times (rfd);
+ ppr_filter_update_date_query (rfd->plugin_page);
+
+ LEAVE(" ");
+}
+
+/** This function is called when the "days ago" spin button is
+ * changed which is then saved and updates the time limitation on
+ * the register query. This is handled by a helper function as
+ * potentially all widgets will need to be examined.
+ *
+ * @param button A pointer to the "days ago" spin button.
+ *
+ * @param rfd A pointer to the filter dialog structure.
+ */
+void
+gnc_ppr_filter_start_end_days_changed_cb (GtkSpinButton* button,
+ RegisterFilterDialog* rfd)
+{
+ g_return_if_fail (GTK_IS_SPIN_BUTTON(button));
+ g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER(rfd->plugin_page));
+
+ ENTER("(button %p, page %p)", button, rfd->plugin_page);
+
+ auto fd = gnc_plugin_page_register_get_filter_data (rfd->plugin_page);
+
+ auto name = gtk_buildable_get_name (GTK_BUILDABLE(button));
+
+ if (g_strcmp0 (name, "start_days_spin") == 0)
+ fd->start_days = gtk_spin_button_get_value (GTK_SPIN_BUTTON(button));
+
+ if (g_strcmp0 (name, "end_days_spin") == 0)
+ fd->end_days = gtk_spin_button_get_value (GTK_SPIN_BUTTON(button));
+
+ get_filter_times (rfd);
+ ppr_filter_update_date_query (rfd->plugin_page);
+
+ LEAVE(" ");
+}
+
+/** This function is called when one of the check buttons for start
+ * relative or start date is changed. It activates the associated
+ * widget and deactivates the other.
+ *
+ * @param button A pointer to a GtkToggleButton widget.
+ *
+ * @param rfd A pointer to the filter dialog structure.
+ */
+void
+gnc_ppr_filter_start_toggle_cb (GtkToggleButton* button,
+ RegisterFilterDialog* rfd)
+{
+ g_return_if_fail (GTK_IS_CHECK_BUTTON(button));
+ g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER(rfd->plugin_page));
+
+ ENTER("Start toggle button (%p), plugin_page %p", button, rfd->plugin_page);
+
+ auto name = gtk_buildable_get_name (GTK_BUILDABLE(button));
+
+ gboolean active = gtk_toggle_button_get_active (button);
+
+ gtk_widget_set_sensitive (rfd->start_earliest, !active);
+
+ if (g_strcmp0 (name, "start_date_check") == 0)
+ {
+ set_sensitive_start_widget (rfd, rfd->start_date, active);
+
+ set_checkbutton_with_blocking (rfd->start_relative_check,
+ rfd->start_days_check,
+ (GFunc)gnc_ppr_filter_start_toggle_cb,
+ rfd, FALSE);
+ }
+ if (g_strcmp0 (name, "start_relative_check") == 0)
+ {
+ set_sensitive_start_widget (rfd, rfd->start_relative, active);
+
+ set_checkbutton_with_blocking (rfd->start_date_check,
+ rfd->start_days_check,
+ (GFunc)gnc_ppr_filter_start_toggle_cb,
+ rfd, FALSE);
+ }
+ if (g_strcmp0 (name, "start_days_check") == 0)
+ {
+ set_sensitive_start_widget (rfd, rfd->start_days, active);
+
+ set_checkbutton_with_blocking (rfd->start_date_check,
+ rfd->start_relative_check,
+ (GFunc)gnc_ppr_filter_start_toggle_cb,
+ rfd, FALSE);
+ }
+ get_filter_times (rfd);
+ ppr_filter_update_date_query (rfd->plugin_page);
+
+ LEAVE(" ");
+}
+
+/** This function is called when one of the check buttons for end
+ * relative or end date is changed. It activates the associated
+ * widget and deactivates the other.
+ *
+ * @param button A pointer to a GtkToggleButton widget.
+ *
+ * @param rfd A pointer to the filter dialog structure.
+ */
+void
+gnc_ppr_filter_end_toggle_cb (GtkToggleButton* button,
+ RegisterFilterDialog* rfd)
+{
+ g_return_if_fail (GTK_IS_CHECK_BUTTON(button));
+ g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER(rfd->plugin_page));
+
+ ENTER("End toggle button (%p), plugin_page %p", button, rfd->plugin_page);
+
+ auto name = gtk_buildable_get_name (GTK_BUILDABLE(button));
+
+ gboolean active = gtk_toggle_button_get_active (button);
+
+ gtk_widget_set_sensitive (rfd->end_latest, !active);
+
+ if (g_strcmp0 (name, "end_date_check") == 0)
+ {
+ set_sensitive_end_widget (rfd, rfd->end_date, active);
+
+ set_checkbutton_with_blocking (rfd->end_relative_check,
+ rfd->end_days_check,
+ (GFunc)gnc_ppr_filter_end_toggle_cb,
+ rfd, FALSE);
+ }
+ if (g_strcmp0 (name, "end_relative_check") == 0)
+ {
+ set_sensitive_end_widget (rfd, rfd->end_relative, active);
+
+ set_checkbutton_with_blocking (rfd->end_date_check,
+ rfd->end_days_check,
+ (GFunc)gnc_ppr_filter_end_toggle_cb,
+ rfd, FALSE);
+ }
+ if (g_strcmp0 (name, "end_days_check") == 0)
+ {
+ set_sensitive_end_widget (rfd, rfd->end_days, active);
+
+ set_checkbutton_with_blocking (rfd->end_date_check,
+ rfd->end_relative_check,
+ (GFunc)gnc_ppr_filter_end_toggle_cb,
+ rfd, FALSE);
+ }
+ get_filter_times (rfd);
+ ppr_filter_update_date_query (rfd->plugin_page);
+
+ LEAVE(" ");
+}
+
/** This function is called whenever the save status is checked
* or unchecked. It will allow saving of the filter if required.
*
@@ -1036,6 +1379,16 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
auto fd = gnc_plugin_page_register_get_filter_data (rfd->plugin_page);
auto gsr = gnc_plugin_page_register_get_gsr (rfd->plugin_page);
+ if ((fd->start_time > 0 && fd->end_time > 0) && (fd->start_time > fd->end_time))
+ {
+ auto response = gnc_ok_cancel_dialog (GTK_WINDOW(rfd->dialog),
+ GTK_RESPONSE_CANCEL,
+ _("The Start date is after the End date.\n"
+ "Select Cancel to change dates.\n"));
+ if (response == GTK_RESPONSE_CANCEL)
+ return;
+ }
+
if (response != GTK_RESPONSE_OK)
{
/* Remove the old status match */
@@ -1043,8 +1396,14 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
gnc_plugin_register_set_enable_refresh (GNC_PLUGIN_PAGE_REGISTER(rfd->plugin_page), FALSE);
ppr_filter_update_status_query (rfd->plugin_page);
gnc_plugin_register_set_enable_refresh (GNC_PLUGIN_PAGE_REGISTER(rfd->plugin_page), TRUE);
+
+ fd->start_ap = rfd->original_start_ap;
fd->start_time = rfd->original_start_time;
+ fd->start_days = rfd->original_start_days;
+ fd->end_ap = rfd->original_end_ap;
fd->end_time = rfd->original_end_time;
+ fd->end_days = rfd->original_end_days;
+
fd->days = rfd->original_days;
fd->save_filter = rfd->original_save_filter;
ppr_filter_update_date_query (rfd->plugin_page);
@@ -1067,6 +1426,30 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
LEAVE(" ");
}
+static GtkWidget *
+setup_period_select (GtkBuilder *builder, gboolean start_type, const gchar *hbox_txt)
+{
+ GtkWidget *period_select = GTK_WIDGET(gnc_period_select_new (start_type));
+
+ auto hbox = GTK_WIDGET(gtk_builder_get_object (builder, hbox_txt));
+ gtk_box_pack_start (GTK_BOX(hbox), period_select, TRUE, TRUE, 0);
+ gtk_widget_show (period_select);
+ gnc_period_select_set_active (GNC_PERIOD_SELECT(period_select), GNC_ACCOUNTING_PERIOD_TODAY);
+ gtk_widget_set_sensitive (GTK_WIDGET(period_select), FALSE);
+ return period_select;
+}
+
+static GtkWidget *
+setup_date_edit (GtkBuilder *builder, const gchar *hbox_txt)
+{
+ GtkWidget *date_widget = gnc_date_edit_new (gnc_time (nullptr), FALSE, FALSE);
+ auto hbox = GTK_WIDGET(gtk_builder_get_object (builder, hbox_txt));
+ gtk_box_pack_start (GTK_BOX(hbox), date_widget, TRUE, TRUE, 0);
+ gtk_widget_show (date_widget);
+ gtk_widget_set_sensitive (GTK_WIDGET(date_widget), FALSE);
+ return date_widget;
+}
+
static void
ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *query)
{
@@ -1074,10 +1457,10 @@ ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *quer
/* Create the dialog */
auto builder = gtk_builder_new();
- gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade",
- "days_adjustment");
- gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade",
- "filter_by_dialog");
+ gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "days_adjustment");
+ gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "start_days_adjustment");
+ gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "end_days_adjustment");
+ gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "filter_by_dialog");
auto dialog = GTK_WIDGET(gtk_builder_get_object (builder, "filter_by_dialog"));
rfd->dialog = dialog;
fd->dialog = rfd->dialog;
@@ -1149,75 +1532,100 @@ ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *quer
rfd->table = table;
gtk_widget_set_sensitive (GTK_WIDGET(table), start_time || end_time);
- rfd->start_date_choose = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_choose"));
- rfd->start_date_today = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_today"));
- rfd->end_date_choose = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_choose"));
- rfd->end_date_today = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_today"));
+ rfd->start_earliest = GTK_WIDGET(gtk_builder_get_object (builder, "earliest_label"));
+ rfd->start_date_check = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_check"));
+ rfd->start_relative_check = GTK_WIDGET(gtk_builder_get_object (builder, "start_relative_check"));
+ rfd->start_days_check = GTK_WIDGET(gtk_builder_get_object (builder, "start_days_check"));
- bool sensitive;
{
+ rfd->start_relative = setup_period_select (builder, TRUE, "start_relative_hbox");
+ rfd->start_date = setup_date_edit (builder, "start_date_hbox");
+ rfd->start_days = GTK_WIDGET(gtk_builder_get_object (builder, "start_days_spin"));
+
/* Start date info */
if (start_time == 0)
{
- button = GTK_WIDGET(gtk_builder_get_object(builder, "start_date_earliest"));
+ set_sensitive_start_widget (rfd, rfd->start_earliest, TRUE);
time_val = xaccQueryGetEarliestDateFound (query);
- sensitive = false;
}
else
{
- time_val = start_time;
- if ((start_time >= gnc_time64_get_today_start()) &&
- (start_time <= gnc_time64_get_today_end()))
+ rfd->original_start_ap = fd->start_ap;
+ if (fd->start_ap != GNC_ACCOUNTING_PERIOD_INVALID)
{
- button = rfd->start_date_today;
- sensitive = false;
+ set_sensitive_start_widget (rfd, rfd->start_relative, TRUE);
+ gnc_period_select_set_active (GNC_PERIOD_SELECT(rfd->start_relative), fd->start_ap);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rfd->start_relative_check), TRUE);
+ }
+ else if (fd->start_days != 0)
+ {
+ set_sensitive_start_widget (rfd, rfd->start_days, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rfd->start_days_check), TRUE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(rfd->start_days), fd->start_days);
+ rfd->original_start_days = fd->start_days;
+
}
else
{
- button = rfd->start_date_choose;
- sensitive = true;
+ set_sensitive_start_widget (rfd, rfd->start_date, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rfd->start_date_check), TRUE);
}
+ time_val = start_time;
}
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
- rfd->start_date = gnc_date_edit_new (gnc_time (nullptr), FALSE, FALSE);
- auto hbox = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_hbox"));
- gtk_box_pack_start (GTK_BOX(hbox), rfd->start_date, TRUE, TRUE, 0);
- gtk_widget_show (rfd->start_date);
- gtk_widget_set_sensitive (GTK_WIDGET(rfd->start_date), bool_to_gboolean (sensitive));
+ g_signal_connect (G_OBJECT(rfd->start_relative), "changed",
+ G_CALLBACK(ppr_filter_relative_changed_cb), rfd);
+
+ if (time_val == 0)
+ time_val = gnc_time64_get_today_start();
gnc_date_edit_set_time (GNC_DATE_EDIT(rfd->start_date), time_val);
g_signal_connect (G_OBJECT(rfd->start_date), "date-changed",
G_CALLBACK(ppr_filter_gde_changed_cb), rfd);
}
+ rfd->end_latest = GTK_WIDGET(gtk_builder_get_object (builder, "latest_label"));
+ rfd->end_date_check = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_check"));
+ rfd->end_relative_check = GTK_WIDGET(gtk_builder_get_object (builder, "end_relative_check"));
+ rfd->end_days_check = GTK_WIDGET(gtk_builder_get_object (builder, "end_days_check"));
+
{
+ rfd->end_relative = setup_period_select (builder, FALSE, "end_relative_hbox");
+ rfd->end_date = setup_date_edit (builder, "end_date_hbox");
+ rfd->end_days = GTK_WIDGET(gtk_builder_get_object (builder, "end_days_spin"));
+
/* End date info */
if (end_time == 0)
{
- button = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_latest"));
+ set_sensitive_end_widget (rfd, rfd->end_latest, TRUE);
time_val = xaccQueryGetLatestDateFound (query);
- sensitive = false;
}
else
{
- time_val = end_time;
- if ((end_time >= gnc_time64_get_today_start()) &&
- (end_time <= gnc_time64_get_today_end()))
+ rfd->original_end_ap = fd->end_ap;
+ if (fd->end_ap != GNC_ACCOUNTING_PERIOD_INVALID)
+ {
+ set_sensitive_end_widget (rfd, rfd->end_relative, TRUE);
+ gnc_period_select_set_active (GNC_PERIOD_SELECT(rfd->end_relative), fd->end_ap);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rfd->end_relative_check), TRUE);
+ }
+ else if (fd->end_days != 0)
{
- button = rfd->end_date_today;
- sensitive = false;
+ set_sensitive_end_widget (rfd, rfd->end_days, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rfd->end_days_check), TRUE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(rfd->end_days), fd->end_days);
+ rfd->original_end_days = fd->end_days;
}
else
{
- button = rfd->end_date_choose;
- sensitive = true;
+ set_sensitive_end_widget (rfd, rfd->end_date, TRUE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rfd->end_date_check), TRUE);
}
+ time_val = end_time;
}
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), TRUE);
- rfd->end_date = gnc_date_edit_new (gnc_time (nullptr), FALSE, FALSE);
- auto hbox = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_hbox"));
- gtk_box_pack_start (GTK_BOX(hbox), rfd->end_date, TRUE, TRUE, 0);
- gtk_widget_show (rfd->end_date);
- gtk_widget_set_sensitive (GTK_WIDGET(rfd->end_date), bool_to_gboolean (sensitive));
+ g_signal_connect (G_OBJECT(rfd->end_relative), "changed",
+ G_CALLBACK(ppr_filter_relative_changed_cb), rfd);
+
+ if (time_val == 0)
+ time_val = gnc_time64_get_today_end();
gnc_date_edit_set_time (GNC_DATE_EDIT(rfd->end_date), time_val);
g_signal_connect (G_OBJECT(rfd->end_date), "date-changed",
G_CALLBACK(ppr_filter_gde_changed_cb), rfd);
diff --git a/gnucash/gnome/gnc-plugin-page-register-filter.hpp b/gnucash/gnome/gnc-plugin-page-register-filter.hpp
index d90620a45f..ad19190696 100644
--- a/gnucash/gnome/gnc-plugin-page-register-filter.hpp
+++ b/gnucash/gnome/gnc-plugin-page-register-filter.hpp
@@ -34,18 +34,22 @@
#define __GNC_PLUGIN_PAGE_REGISTER_FILTER_HPP
#include <gtk/gtk.h>
-#include "gnc-split-reg.h"
+#include "gnc-accounting-period.h"
#include "gnc-plugin-page.h"
#include <stdbool.h>
struct FilterData
{
- GtkWidget* dialog;
- cleared_match_t cleared_match;
- time64 start_time;
- time64 end_time;
- int days;
- bool save_filter;
+ GtkWidget* dialog;
+ cleared_match_t cleared_match;
+ GncAccountingPeriod start_ap;
+ time64 start_time;
+ int start_days;
+ GncAccountingPeriod end_ap;
+ time64 end_time;
+ int end_days;
+ int days;
+ bool save_filter;
};
void gnc_ppr_filter_set_tooltip (GncPluginPage* plugin_page, struct FilterData *fd);
diff --git a/gnucash/gtkbuilder/gnc-plugin-page-register.glade b/gnucash/gtkbuilder/gnc-plugin-page-register.glade
index 72714b4ced..0cc909f290 100644
--- a/gnucash/gtkbuilder/gnc-plugin-page-register.glade
+++ b/gnucash/gtkbuilder/gnc-plugin-page-register.glade
@@ -7,6 +7,16 @@
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
+ <object class="GtkAdjustment" id="end_days_adjustment">
+ <property name="upper">1100</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
+ <object class="GtkAdjustment" id="start_days_adjustment">
+ <property name="upper">1100</property>
+ <property name="step-increment">1</property>
+ <property name="page-increment">10</property>
+ </object>
<object class="GtkDialog" id="filter_by_dialog">
<property name="can-focus">False</property>
<property name="border-width">6</property>
@@ -97,7 +107,7 @@
<property name="can-focus">False</property>
<child>
<object class="GtkRadioButton" id="filter_show_days">
- <property name="label" translatable="yes">Show _number of days</property>
+ <property name="label" translatable="yes">Show _from days ago</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
@@ -155,18 +165,28 @@ If 0, all previous days included</property>
</packing>
</child>
<child>
- <!-- n-columns=3 n-rows=7 -->
+ <!-- n-columns=2 n-rows=8 -->
<object class="GtkGrid" id="select_range_table">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">12</property>
<property name="row-spacing">3</property>
<property name="column-spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label847683">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
<child>
<object class="GtkLabel" id="label847682">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="halign">end</property>
+ <property name="halign">start</property>
<property name="label" translatable="yes" comments="Filter By Dialog, Date Tab, Start section">Start</property>
</object>
<packing>
@@ -175,129 +195,139 @@ If 0, all previous days included</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="start_date_earliest">
- <property name="label" translatable="yes">_Earliest</property>
+ <object class="GtkCheckButton" id="start_relative_check">
+ <property name="label" translatable="yes">Re_lative</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
- <property name="halign">start</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
- <signal name="clicked" handler="gnc_ppr_filter_start_cb" swapped="no"/>
+ <signal name="toggled" handler="gnc_ppr_filter_start_toggle_cb" swapped="no"/>
</object>
<packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
+ <property name="left-attach">0</property>
+ <property name="top-attach">1</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="end_date_choose">
- <property name="label" translatable="yes">Choo_se Date</property>
+ <object class="GtkCheckButton" id="start_date_check">
+ <property name="label" translatable="yes">C_hoose Date</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
- <property name="halign">start</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
- <signal name="clicked" handler="gnc_ppr_filter_end_cb" swapped="no"/>
+ <signal name="toggled" handler="gnc_ppr_filter_start_toggle_cb" swapped="no"/>
</object>
<packing>
- <property name="left-attach">1</property>
- <property name="top-attach">6</property>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="end_date_today">
- <property name="label" translatable="yes">Toda_y</property>
+ <object class="GtkCheckButton" id="start_days_check">
+ <property name="label" translatable="yes">_Days ago</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
- <property name="halign">start</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
- <property name="group">end_date_choose</property>
- <signal name="clicked" handler="gnc_ppr_filter_end_cb" swapped="no"/>
+ <signal name="toggled" handler="gnc_ppr_filter_start_toggle_cb" swapped="no"/>
</object>
<packing>
- <property name="left-attach">1</property>
- <property name="top-attach">5</property>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="end_date_latest">
- <property name="label" translatable="yes">_Latest</property>
+ <object class="GtkBox" id="start_date_hbox">
<property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">False</property>
- <property name="halign">start</property>
- <property name="use-underline">True</property>
- <property name="draw-indicator">True</property>
- <property name="group">end_date_choose</property>
- <signal name="clicked" handler="gnc_ppr_filter_end_cb" swapped="no"/>
+ <property name="can-focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
</object>
<packing>
<property name="left-attach">1</property>
- <property name="top-attach">4</property>
+ <property name="top-attach">2</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label847683">
+ <object class="GtkBox" id="start_relative_hbox">
<property name="visible">True</property>
<property name="can-focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
</object>
<packing>
- <property name="left-attach">0</property>
+ <property name="left-attach">1</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="start_days_spin">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="tooltip-text" translatable="yes">Valid range is 0 to 1100 days
+If 0, all previous days included</property>
+ <property name="text" translatable="yes">0</property>
+ <property name="adjustment">start_days_adjustment</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="gnc_ppr_filter_start_end_days_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
- <object class="GtkLabel" id="label847684">
+ <object class="GtkCheckButton" id="end_relative_check">
+ <property name="label" translatable="yes">Rela_tive</property>
<property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="halign">end</property>
- <property name="label" translatable="yes" comments="Filter By Dialog, Date Tab, End section">End</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <signal name="toggled" handler="gnc_ppr_filter_end_toggle_cb" swapped="no"/>
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">4</property>
+ <property name="top-attach">5</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="start_date_choose">
- <property name="label" translatable="yes">C_hoose Date</property>
+ <object class="GtkCheckButton" id="end_date_check">
+ <property name="label" translatable="yes">Choo_se Date</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
- <property name="halign">start</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
- <property name="group">start_date_earliest</property>
- <signal name="clicked" handler="gnc_ppr_filter_start_cb" swapped="no"/>
+ <signal name="toggled" handler="gnc_ppr_filter_end_toggle_cb" swapped="no"/>
</object>
<packing>
- <property name="left-attach">1</property>
- <property name="top-attach">2</property>
+ <property name="left-attach">0</property>
+ <property name="top-attach">6</property>
</packing>
</child>
<child>
- <object class="GtkRadioButton" id="start_date_today">
- <property name="label" translatable="yes">_Today</property>
+ <object class="GtkCheckButton" id="end_days_check">
+ <property name="label" translatable="yes">Days a_go</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
- <property name="halign">start</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
- <property name="group">start_date_earliest</property>
- <signal name="clicked" handler="gnc_ppr_filter_start_cb" swapped="no"/>
+ <signal name="toggled" handler="gnc_ppr_filter_end_toggle_cb" swapped="no"/>
</object>
<packing>
- <property name="left-attach">1</property>
- <property name="top-attach">1</property>
+ <property name="left-attach">0</property>
+ <property name="top-attach">7</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="start_date_hbox">
+ <object class="GtkBox" id="end_date_hbox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
@@ -305,12 +335,12 @@ If 0, all previous days included</property>
</child>
</object>
<packing>
- <property name="left-attach">2</property>
- <property name="top-attach">2</property>
+ <property name="left-attach">1</property>
+ <property name="top-attach">6</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="end_date_hbox">
+ <object class="GtkBox" id="end_relative_hbox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
@@ -318,36 +348,63 @@ If 0, all previous days included</property>
</child>
</object>
<packing>
- <property name="left-attach">2</property>
- <property name="top-attach">6</property>
+ <property name="left-attach">1</property>
+ <property name="top-attach">5</property>
</packing>
</child>
<child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
+ <object class="GtkSpinButton" id="end_days_spin">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="tooltip-text" translatable="yes">Valid range is 0 to 1100 days
+If 0, all previous days included</property>
+ <property name="text" translatable="yes">0</property>
+ <property name="adjustment">end_days_adjustment</property>
+ <property name="numeric">True</property>
+ <signal name="value-changed" handler="gnc_ppr_filter_start_end_days_changed_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">7</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="label847684">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes" comments="Filter By Dialog, Date Tab, End section">End</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">4</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="earliest_label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">Earliest</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkLabel" id="latest_label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes">Latest</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">4</property>
+ </packing>
</child>
<child>
<placeholder/>
commit a780cd1a11b797ae23c768d20b289ac056d8cd5b
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jun 7 10:21:47 2026 +0100
Remove Doxygen comments from static functions in gnc_plugin_page_register_filter.cpp.
diff --git a/gnucash/gnome/gnc-plugin-page-register-filter.cpp b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
index 22ed8ff4df..2e84c12b8c 100644
--- a/gnucash/gnome/gnc-plugin-page-register-filter.cpp
+++ b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
@@ -491,18 +491,6 @@ gnc_ppr_filter_set_tooltip (GncPluginPage* plugin_page, FilterData *fd)
LEAVE(" ");
}
-/** This function updates the "cleared match" term of the register
- * query. It unconditionally removes any old "cleared match" query
- * term, then adds back a new query term if needed. There seems to
- * be a bug in the current g2 register code such that when the number
- * of entries in the register doesn't fill up the window, the blank
- * space at the end of the window isn't correctly redrawn. This
- * function works around that problem, but a root cause analysis
- * should probably be done.
- *
- * @param plugin_page A pointer to the GncPluginPageRegister that is
- * associated with this filter dialog.
- */
static void
ppr_filter_update_status_query (GncPluginPage* plugin_page)
{
@@ -547,18 +535,6 @@ ppr_filter_update_status_query (GncPluginPage* plugin_page)
LEAVE (" ");
}
-/** This function updates the "date posted" term of the register
- * query. It unconditionally removes any old "date posted" query
- * term, then adds back a new query term if needed. There seems to
- * be a bug in the current g2 register code such that when the number
- * of entries in the register doesn't fill up the window, the blank
- * space at the end of the window isn't correctly redrawn. This
- * function works around that problem, but a root cause analysis
- * should probably be done.
- *
- * @param plugin_page A pointer to the GncPluginPageRegister that is
- * associated with this filter dialog.
- */
static void
ppr_filter_update_date_query (GncPluginPage* plugin_page)
{
@@ -799,16 +775,6 @@ gnc_ppr_filter_status_clear_all_cb (GtkButton* button,
LEAVE(" ");
}
-/** This function computes the starting and ending times for the
- * 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 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.
- *
- * @param rfd A pointer to the filter dialog structure.
- */
static void
get_filter_times (RegisterFilterDialog* rfd)
{
@@ -919,15 +885,6 @@ gnc_ppr_filter_days_changed_cb (GtkSpinButton* button,
LEAVE(" ");
}
-/** This function is called when one of the start date entry widgets
- * is updated. It simply calls common routines to determine the
- * start/end times and update the register query.
- *
- * @param unused A pointer to a GncDateEntry widgets, but it could be
- * any widget.
- *
- * @param rfd A pointer to the filter dialog structure.
- */
static void
ppr_filter_gde_changed_cb (GtkWidget* unused,
RegisterFilterDialog* rfd)
@@ -1110,14 +1067,6 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
LEAVE(" ");
}
-/** This function is called to create the filter dialog.
- *
- * @param rfd A pointer to the filter dialog structure.
- *
- * @param fd The filter data structure for remembering state.
- *
- * @param query A pointer to the current register query.
- */
static void
ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *query)
{
commit cdbd06b14f49491276a20f9372558b6d022725b2
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jun 7 10:21:20 2026 +0100
Drop the gnc_ prefix for any static functions in gnc_plugin_page_register_filter.cpp
diff --git a/gnucash/gnome/gnc-plugin-page-register-filter.cpp b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
index ecc3c4745e..22ed8ff4df 100644
--- a/gnucash/gnome/gnc-plugin-page-register-filter.cpp
+++ b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
@@ -160,7 +160,7 @@ get_filter_default_num_of_days (GNCLedgerDisplayType ledger_type)
/* This function converts a time64 value date to a string */
static std::string
-gnc_ppr_filter_time2dmy (time64 raw_time)
+ppr_filter_time2dmy (time64 raw_time)
{
struct tm* timeinfo;
char date_string[11];
@@ -175,7 +175,7 @@ gnc_ppr_filter_time2dmy (time64 raw_time)
/* This function converts a string date to a time64 value */
static time64
-gnc_ppr_filter_dmy2time (std::string date_string)
+ppr_filter_dmy2time (std::string date_string)
{
struct tm when;
@@ -206,8 +206,8 @@ split_filter_by_delimiter (std::string str, char delimiter)
}
static void
-gnc_ppr_check_for_empty_group (GKeyFile *state_file,
- const gchar *state_section)
+ppr_check_for_empty_group (GKeyFile *state_file,
+ const gchar *state_section)
{
gsize num_keys;
gchar **keys = g_key_file_get_keys (state_file, state_section, &num_keys, nullptr);
@@ -219,7 +219,7 @@ gnc_ppr_check_for_empty_group (GKeyFile *state_file,
}
static std::string
-gnc_ppr_filter_load_filter (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type)
+ppr_filter_load_filter (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type)
{
// get the filter from the .gcm file
GKeyFile* state_file = gnc_state_get_current();
@@ -255,7 +255,7 @@ set_filterdata_to_defaults (FilterData *fd)
}
static void
-gnc_ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type, FilterData *fd)
+ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_type, FilterData *fd)
{
set_filterdata_to_defaults (fd);
fd->dialog = nullptr;
@@ -263,7 +263,7 @@ gnc_ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_
if (!gsr)
return;
- std::string filter_str = gnc_ppr_filter_load_filter (gsr, ledger_type);
+ std::string filter_str = ppr_filter_load_filter (gsr, ledger_type);
PINFO("Loaded Filter String is %s", filter_str.c_str());
@@ -282,7 +282,7 @@ gnc_ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_
{
PINFO("Loaded Filter Start Date is %s", split_filter[1].c_str());
- fd->start_time = gnc_ppr_filter_dmy2time (split_filter[1]);
+ fd->start_time = ppr_filter_dmy2time (split_filter[1]);
fd->start_time = gnc_time64_get_day_start (fd->start_time);
fd->save_filter = true;
}
@@ -291,7 +291,7 @@ gnc_ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_
{
PINFO("Loaded Filter End Date is %s", split_filter[2].c_str());
- fd->end_time = gnc_ppr_filter_dmy2time (split_filter[2]);
+ fd->end_time = ppr_filter_dmy2time (split_filter[2]);
fd->end_time = gnc_time64_get_day_end (fd->end_time);
fd->save_filter = true;
}
@@ -310,7 +310,7 @@ gnc_ppr_filter_load_filter_parts (GNCSplitReg *gsr, GNCLedgerDisplayType ledger_
}
static void
-gnc_ppr_filter_save_filter (GNCSplitReg *gsr, std::string filter)
+ppr_filter_save_filter (GNCSplitReg *gsr, std::string filter)
{
GNCLedgerDisplayType ledger_type = gnc_ledger_display_type (gsr->ledger);
@@ -327,7 +327,7 @@ gnc_ppr_filter_save_filter (GNCSplitReg *gsr, std::string filter)
if (g_key_file_has_key (state_file, state_section, KEY_PAGE_FILTER, nullptr))
g_key_file_remove_key (state_file, state_section, KEY_PAGE_FILTER, nullptr);
- gnc_ppr_check_for_empty_group (state_file, state_section);
+ ppr_check_for_empty_group (state_file, state_section);
}
else
{
@@ -339,7 +339,7 @@ gnc_ppr_filter_save_filter (GNCSplitReg *gsr, std::string filter)
}
static void
-gnc_ppr_filter_save_filter_parts (GNCSplitReg *gsr, FilterData *fd)
+ppr_filter_save_filter_parts (GNCSplitReg *gsr, FilterData *fd)
{
if (!gsr)
return;
@@ -358,7 +358,7 @@ gnc_ppr_filter_save_filter_parts (GNCSplitReg *gsr, FilterData *fd)
// start time
if (fd->start_time != 0)
{
- save_filter_str.append (";" + gnc_ppr_filter_time2dmy (fd->start_time));
+ save_filter_str.append (";" + ppr_filter_time2dmy (fd->start_time));
}
else
save_filter_str.append (";0");
@@ -366,7 +366,7 @@ gnc_ppr_filter_save_filter_parts (GNCSplitReg *gsr, FilterData *fd)
// end time
if (fd->end_time != 0)
{
- save_filter_str.append (";" + gnc_ppr_filter_time2dmy (fd->end_time));
+ save_filter_str.append (";" + ppr_filter_time2dmy (fd->end_time));
}
else
save_filter_str.append (";0");
@@ -379,12 +379,12 @@ gnc_ppr_filter_save_filter_parts (GNCSplitReg *gsr, FilterData *fd)
else
save_filter_str.append (";0");
}
- gnc_ppr_filter_save_filter (gsr, save_filter_str);
+ ppr_filter_save_filter (gsr, save_filter_str);
}
static void
-gpp_update_match_filter_text (cleared_match_t match, const guint mask,
- const gchar* filter_name, GList **show, GList **hide)
+update_match_filter_text (cleared_match_t match, const guint mask,
+ const gchar* filter_name, GList **show, GList **hide)
{
if ((match & mask) == mask)
*show = g_list_prepend (*show, g_strdup (filter_name));
@@ -440,16 +440,16 @@ gnc_ppr_filter_set_tooltip (GncPluginPage* plugin_page, FilterData *fd)
GList *show = nullptr;
GList *hide = nullptr;
- gpp_update_match_filter_text (fd->cleared_match, 0x01, _("Unreconciled"),
- &show, &hide);
- gpp_update_match_filter_text (fd->cleared_match, 0x02, _("Cleared"),
- &show, &hide);
- gpp_update_match_filter_text (fd->cleared_match, 0x04, _("Reconciled"),
- &show, &hide);
- gpp_update_match_filter_text (fd->cleared_match, 0x08, _("Frozen"),
- &show, &hide);
- gpp_update_match_filter_text (fd->cleared_match, 0x10, _("Voided"),
- &show, &hide);
+ update_match_filter_text (fd->cleared_match, 0x01, _("Unreconciled"),
+ &show, &hide);
+ update_match_filter_text (fd->cleared_match, 0x02, _("Cleared"),
+ &show, &hide);
+ update_match_filter_text (fd->cleared_match, 0x04, _("Reconciled"),
+ &show, &hide);
+ update_match_filter_text (fd->cleared_match, 0x08, _("Frozen"),
+ &show, &hide);
+ update_match_filter_text (fd->cleared_match, 0x10, _("Voided"),
+ &show, &hide);
show = g_list_reverse (show);
hide = g_list_reverse (hide);
@@ -504,7 +504,7 @@ gnc_ppr_filter_set_tooltip (GncPluginPage* plugin_page, FilterData *fd)
* associated with this filter dialog.
*/
static void
-gnc_ppr_filter_update_status_query (GncPluginPage* plugin_page)
+ppr_filter_update_status_query (GncPluginPage* plugin_page)
{
ENTER(" ");
@@ -560,7 +560,7 @@ gnc_ppr_filter_update_status_query (GncPluginPage* plugin_page)
* associated with this filter dialog.
*/
static void
-gnc_ppr_filter_update_date_query (GncPluginPage* plugin_page)
+ppr_filter_update_date_query (GncPluginPage* plugin_page)
{
ENTER(" ");
@@ -636,7 +636,7 @@ gnc_ppr_filter_clear_current_filter (GncPluginPage* plugin_page)
set_filterdata_to_defaults (fd);
- gnc_ppr_filter_update_date_query (plugin_page);
+ ppr_filter_update_date_query (plugin_page);
}
/** This function is called to update the register.
@@ -660,7 +660,7 @@ gnc_ppr_filter_update_register (GncPluginPage* plugin_page)
/* Set the filter for the split register and status of save filter button */
fd->save_filter = false;
- gnc_ppr_filter_load_filter_parts (gsr, ledger_type, fd);
+ ppr_filter_load_filter_parts (gsr, ledger_type, fd);
if (ledger_type == LD_GL)
{
@@ -670,8 +670,8 @@ gnc_ppr_filter_update_register (GncPluginPage* plugin_page)
set_filterdata_to_defaults (fd);
}
/* Update Query with Filter Status and Dates */
- gnc_ppr_filter_update_status_query (plugin_page);
- gnc_ppr_filter_update_date_query (plugin_page);
+ ppr_filter_update_status_query (plugin_page);
+ ppr_filter_update_date_query (plugin_page);
}
/** This function is called whenever one of the status entries is
@@ -713,7 +713,7 @@ gnc_ppr_filter_status_one_cb (GtkToggleButton* button,
else
fd->cleared_match = (cleared_match_t)(fd->cleared_match & ~value);
- gnc_ppr_filter_update_status_query (rfd->plugin_page);
+ ppr_filter_update_status_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -762,7 +762,7 @@ gnc_ppr_filter_status_select_all_cb (GtkButton* button,
/* Set the requested status */
fd->cleared_match = CLEARED_ALL;
- gnc_ppr_filter_update_status_query (rfd->plugin_page);
+ ppr_filter_update_status_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -795,7 +795,7 @@ gnc_ppr_filter_status_clear_all_cb (GtkButton* button,
/* Set the requested status */
fd->cleared_match = CLEARED_NONE;
- gnc_ppr_filter_update_status_query (rfd->plugin_page);
+ ppr_filter_update_status_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -889,7 +889,7 @@ gnc_ppr_filter_select_range_cb (GtkRadioButton* button,
fd->end_time = 0;
fd->days = 0;
}
- gnc_ppr_filter_update_date_query (rfd->plugin_page);
+ ppr_filter_update_date_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -914,7 +914,7 @@ gnc_ppr_filter_days_changed_cb (GtkSpinButton* button,
auto fd = gnc_plugin_page_register_get_filter_data (rfd->plugin_page);
fd->days = gtk_spin_button_get_value (GTK_SPIN_BUTTON(button));
- gnc_ppr_filter_update_date_query (rfd->plugin_page);
+ ppr_filter_update_date_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -929,8 +929,8 @@ gnc_ppr_filter_days_changed_cb (GtkSpinButton* button,
* @param rfd A pointer to the filter dialog structure.
*/
static void
-gnc_ppr_filter_gde_changed_cb (GtkWidget* unused,
- RegisterFilterDialog* rfd)
+ppr_filter_gde_changed_cb (GtkWidget* unused,
+ RegisterFilterDialog* rfd)
{
g_return_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER(rfd->plugin_page));
@@ -938,7 +938,7 @@ gnc_ppr_filter_gde_changed_cb (GtkWidget* unused,
gtk_buildable_get_name (GTK_BUILDABLE(unused)), unused, rfd->plugin_page);
get_filter_times (rfd);
- gnc_ppr_filter_update_date_query (rfd->plugin_page);
+ ppr_filter_update_date_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -981,7 +981,7 @@ gnc_ppr_filter_start_cb (GtkWidget* radio,
gboolean active = !g_strcmp0 (name, "start_date_choose");
gtk_widget_set_sensitive (rfd->start_date, active);
get_filter_times (rfd);
- gnc_ppr_filter_update_date_query (rfd->plugin_page);
+ ppr_filter_update_date_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -1024,7 +1024,7 @@ gnc_ppr_filter_end_cb (GtkWidget* radio,
gboolean active = !g_strcmp0 (name, "end_date_choose");
gtk_widget_set_sensitive (rfd->end_date, active);
get_filter_times (rfd);
- gnc_ppr_filter_update_date_query (rfd->plugin_page);
+ ppr_filter_update_date_query (rfd->plugin_page);
LEAVE(" ");
}
@@ -1084,24 +1084,24 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
/* Remove the old status match */
fd->cleared_match = rfd->original_cleared_match;
gnc_plugin_register_set_enable_refresh (GNC_PLUGIN_PAGE_REGISTER(rfd->plugin_page), FALSE);
- gnc_ppr_filter_update_status_query (rfd->plugin_page);
+ ppr_filter_update_status_query (rfd->plugin_page);
gnc_plugin_register_set_enable_refresh (GNC_PLUGIN_PAGE_REGISTER(rfd->plugin_page), TRUE);
fd->start_time = rfd->original_start_time;
fd->end_time = rfd->original_end_time;
fd->days = rfd->original_days;
fd->save_filter = rfd->original_save_filter;
- gnc_ppr_filter_update_date_query (rfd->plugin_page);
+ ppr_filter_update_date_query (rfd->plugin_page);
}
else
{
// clear the filter when unticking the save option
if (!fd->save_filter && rfd->original_save_filter)
- gnc_ppr_filter_save_filter (gsr, "");
+ ppr_filter_save_filter (gsr, "");
rfd->original_save_filter = fd->save_filter;
if (fd->save_filter)
- gnc_ppr_filter_save_filter_parts (gsr, fd);
+ ppr_filter_save_filter_parts (gsr, fd);
}
rfd->dialog = nullptr;
fd->dialog = nullptr;
@@ -1119,7 +1119,7 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
* @param query A pointer to the current register query.
*/
static void
-gnc_ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *query)
+ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *query)
{
time64 start_time, end_time, time_val;
@@ -1237,7 +1237,7 @@ gnc_ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *
gtk_widget_set_sensitive (GTK_WIDGET(rfd->start_date), bool_to_gboolean (sensitive));
gnc_date_edit_set_time (GNC_DATE_EDIT(rfd->start_date), time_val);
g_signal_connect (G_OBJECT(rfd->start_date), "date-changed",
- G_CALLBACK(gnc_ppr_filter_gde_changed_cb), rfd);
+ G_CALLBACK(ppr_filter_gde_changed_cb), rfd);
}
{
@@ -1271,7 +1271,7 @@ gnc_ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *
gtk_widget_set_sensitive (GTK_WIDGET(rfd->end_date), bool_to_gboolean (sensitive));
gnc_date_edit_set_time (GNC_DATE_EDIT(rfd->end_date), time_val);
g_signal_connect (G_OBJECT(rfd->end_date), "date-changed",
- G_CALLBACK(gnc_ppr_filter_gde_changed_cb), rfd);
+ G_CALLBACK(ppr_filter_gde_changed_cb), rfd);
}
/* Wire it up */
@@ -1307,7 +1307,7 @@ gnc_ppr_filter_by (GncPluginPage *plugin_page, Query *query,
rfd->plugin_page = plugin_page;
rfd->show_save_button = show_save_button;
- gnc_ppr_filter_dialog_create (rfd, fd, query);
+ ppr_filter_dialog_create (rfd, fd, query);
LEAVE(" ");
}
commit e7ae77109634963f91ed431b8d6ae53cc26098ed
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Fri Apr 24 11:21:23 2026 +0100
Remove some missed trailing spaces from gnc_plugin_page_register_filter.c
diff --git a/gnucash/gnome/gnc-plugin-page-register-filter.cpp b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
index aedc53ec3f..ecc3c4745e 100644
--- a/gnucash/gnome/gnc-plugin-page-register-filter.cpp
+++ b/gnucash/gnome/gnc-plugin-page-register-filter.cpp
@@ -397,7 +397,7 @@ gpp_update_match_filter_text (cleared_match_t match, const guint mask,
*
* @param page A pointer to the GncPluginPageRegister that is
* associated with this filter dialog.
- *
+ *
* @param fd A pointer to the filter data used for filter state.
*/
void
@@ -621,7 +621,7 @@ gnc_ppr_filter_update_date_query (GncPluginPage* plugin_page)
LEAVE(" ");
}
-/** This function is used to clear the current filter so that a
+/** This function is used to clear the current filter so that a
* specific split can be shown in the register.
*
* @param page A pointer to the GncPluginPageRegister that is
@@ -1113,7 +1113,7 @@ gnc_ppr_filter_response_cb (GtkDialog* dialog,
/** This function is called to create the filter dialog.
*
* @param rfd A pointer to the filter dialog structure.
- *
+ *
* @param fd The filter data structure for remembering state.
*
* @param query A pointer to the current register query.
@@ -1287,9 +1287,9 @@ gnc_ppr_filter_dialog_create (RegisterFilterDialog* rfd, FilterData *fd, Query *
*
* @param plugin_page A pointer to the GncPluginPageRegister that is
* associated with this filter dialog.
- *
+ *
* @param query A pointer to the current register query.
- *
+ *
* @param fd A pointer to the filter data structure for remembering state.
*
* @param show_save_button Set to True to show save button.
Summary of changes:
gnucash/gnome-utils/dialog-preferences.c | 15 -
gnucash/gnome-utils/gnc-period-select.c | 4 +-
gnucash/gnome/gnc-plugin-page-register-filter.cpp | 761 ++++++++++++++++------
gnucash/gnome/gnc-plugin-page-register-filter.hpp | 18 +-
gnucash/gtkbuilder/gnc-plugin-page-register.glade | 213 +++---
libgnucash/engine/gnc-accounting-period.c | 4 +-
6 files changed, 708 insertions(+), 307 deletions(-)
More information about the gnucash-changes
mailing list