diff --git a/ChangeLog b/ChangeLog index 7fe641f37f..51dc0ed030 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2003-01-14 Derek Atkins + + * src/engine/QueryNew.h: add QUERY_PARAM_ACTIVE + * src/business/business-core/gncCustomer.c: + * src/business/business-core/gncEmployee.c: + * src/business/business-core/gncInvoice.c: + * src/business/business-core/gncJob.c: + * src/business/business-core/gncOrder.c: + * src/business/business-core/gncVendor.c: + add the QUERY_PARAM_ACTIVE parameter support + * src/app-util/prefs.scm: add hidden preference to store + the user's choice of searchin + * src/gnome-search/search.glade: add a checkbox to search-for-all + * src/gnome-search/dialog-search.c -- add preliminary support to + limit searches to only "active" objects. Fixes bug #103506 + 2003-01-13 David Hampton * src/engine/engine-helpers.c: Make the gnc_scm_to_gint64() diff --git a/src/app-utils/prefs.scm b/src/app-utils/prefs.scm index dc04ffdbf1..1573cea7a5 100644 --- a/src/app-utils/prefs.scm +++ b/src/app-utils/prefs.scm @@ -747,3 +747,9 @@ without one.") (gnc:register-configuration-option (gnc:make-internal-option "__paths" "Import OFX" #f)) + +(gnc:register-configuration-option + (gnc:make-simple-boolean-option + "__gui" "search_for_active_only" + "" "" + #t)) diff --git a/src/business/business-core/gncCustomer.c b/src/business/business-core/gncCustomer.c index 555bdd9f31..feadb2834e 100644 --- a/src/business/business-core/gncCustomer.c +++ b/src/business/business-core/gncCustomer.c @@ -536,6 +536,7 @@ gboolean gncCustomerRegister (void) { CUSTOMER_SHIPADDR, GNC_ADDRESS_MODULE_NAME, (QueryAccess)gncCustomerGetShipAddr }, { QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncCustomerGetBook }, { QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncCustomerGetGUID }, + { QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncCustomerGetActive }, { NULL }, }; diff --git a/src/business/business-core/gncEmployee.c b/src/business/business-core/gncEmployee.c index 9ea0e76791..ab56d6eba0 100644 --- a/src/business/business-core/gncEmployee.c +++ b/src/business/business-core/gncEmployee.c @@ -399,6 +399,7 @@ gboolean gncEmployeeRegister (void) { EMPLOYEE_ADDR, GNC_ADDRESS_MODULE_NAME, (QueryAccess)gncEmployeeGetAddr }, { QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncEmployeeGetBook }, { QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncEmployeeGetGUID }, + { QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncEmployeeGetActive }, { NULL }, }; diff --git a/src/business/business-core/gncInvoice.c b/src/business/business-core/gncInvoice.c index 6ab5b0440f..4ed98342e6 100644 --- a/src/business/business-core/gncInvoice.c +++ b/src/business/business-core/gncInvoice.c @@ -1262,6 +1262,7 @@ gboolean gncInvoiceRegister (void) { INVOICE_BILLTO, GNC_OWNER_MODULE_NAME, (QueryAccess)gncInvoiceGetBillTo }, { QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncInvoiceGetBook }, { QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncInvoiceGetGUID }, + { QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncInvoiceGetActive }, { NULL }, }; diff --git a/src/business/business-core/gncJob.c b/src/business/business-core/gncJob.c index 3da5041c51..f4c6ebc80d 100644 --- a/src/business/business-core/gncJob.c +++ b/src/business/business-core/gncJob.c @@ -387,6 +387,7 @@ gboolean gncJobRegister (void) { JOB_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncJobGetActive }, { QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncJobGetBook }, { QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncJobGetGUID }, + { QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncJobGetActive }, { NULL }, }; diff --git a/src/business/business-core/gncOrder.c b/src/business/business-core/gncOrder.c index f5a887b15e..91941f0ec6 100644 --- a/src/business/business-core/gncOrder.c +++ b/src/business/business-core/gncOrder.c @@ -443,6 +443,7 @@ gboolean gncOrderRegister (void) { ORDER_NOTES, QUERYCORE_STRING, (QueryAccess)gncOrderGetNotes }, { QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncOrderGetBook }, { QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncOrderGetGUID }, + { QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncOrderGetActive }, { NULL }, }; diff --git a/src/business/business-core/gncVendor.c b/src/business/business-core/gncVendor.c index adf3e4c613..f99cfc6192 100644 --- a/src/business/business-core/gncVendor.c +++ b/src/business/business-core/gncVendor.c @@ -487,6 +487,7 @@ gboolean gncVendorRegister (void) { VENDOR_ADDR, GNC_ADDRESS_MODULE_NAME, (QueryAccess)gncVendorGetAddr }, { QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncVendorGetBook }, { QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncVendorGetGUID }, + { QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncVendorGetActive }, { NULL }, }; diff --git a/src/engine/QueryNew.h b/src/engine/QueryNew.h index 6005abcf34..e579ea7cac 100644 --- a/src/engine/QueryNew.h +++ b/src/engine/QueryNew.h @@ -28,6 +28,8 @@ typedef enum { /* "Known" Object Parameters -- all objects must support these */ #define QUERY_PARAM_BOOK "book" #define QUERY_PARAM_GUID "guid" +#define QUERY_PARAM_ACTIVE "active" /* it's ok if an object does + * not support this */ /* Basic API Functions */ diff --git a/src/engine/gnc-numeric.c b/src/engine/gnc-numeric.c index b66d41d802..d79bea6468 100644 --- a/src/engine/gnc-numeric.c +++ b/src/engine/gnc-numeric.c @@ -727,6 +727,7 @@ gnc_numeric_lcd(gnc_numeric a, gnc_numeric b) { * as the output denominator. ********************************************************************/ +#if 1 gnc_numeric gnc_numeric_reduce(gnc_numeric in) { gint64 t; @@ -753,7 +754,7 @@ gnc_numeric_reduce(gnc_numeric in) { return out; } -#if 0 +#else gnc_numeric gnc_numeric_reduce(gnc_numeric in) { diff --git a/src/gnome-search/dialog-search.c b/src/gnome-search/dialog-search.c index 8bec496dcf..d458b69c70 100644 --- a/src/gnome-search/dialog-search.c +++ b/src/gnome-search/dialog-search.c @@ -15,6 +15,7 @@ #include "gnc-ui-util.h" #include "gnc-ui.h" #include "gnc-gui-query.h" +#include "global-options.h" #include "gncObject.h" #include "QueryNew.h" #include "QueryObject.h" @@ -48,6 +49,8 @@ struct _GNCSearchWindow { GtkWidget * add_rb; GtkWidget * del_rb; + GtkWidget * active_only_check; + /* The Select button */ GtkWidget * select_button; @@ -387,30 +390,45 @@ search_type_cb (GtkToggleButton *button, GNCSearchWindow *sw) } } +static void +search_active_only_cb (GtkToggleButton *button, GNCSearchWindow *sw) +{ + gnc_set_boolean_option("__gui", "search_for_active_only", + gtk_toggle_button_get_active (button)); +} + static void search_update_query (GNCSearchWindow *sw) { + static GSList *active_params = NULL; QueryNew *q, *q2, *new_q; GList *node; QueryOp op; + QueryPredData_t pdata; if (sw->grouping == GNC_SEARCH_MATCH_ANY) op = QUERY_OR; else op = QUERY_AND; + if (active_params == NULL) + active_params = g_slist_prepend (NULL, QUERY_PARAM_ACTIVE); + /* Make sure we supply a book! */ if (sw->start_q == NULL) { sw->start_q = gncQueryCreateFor (sw->search_for); gncQuerySetBook (sw->start_q, gnc_get_current_book ()); + } else { + /* We've got a query -- purge it of any "active" parameters */ + gncQueryPurgeTerms (sw->start_q, active_params); } + /* Now create a new query to work from */ q = gncQueryCreateFor (sw->search_for); /* Walk the list of criteria */ for (node = sw->crit_list; node; node = node->next) { struct _crit_data *data = node->data; - QueryPredData_t pdata; pdata = gnc_search_core_type_get_predicate (data->element); if (pdata) @@ -448,6 +466,11 @@ search_update_query (GNCSearchWindow *sw) break; } + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sw->active_only_check))) { + gncQueryAddBooleanMatch (new_q, active_params, TRUE, QUERY_AND); + active_params = NULL; + } + /* Destroy the old query */ if (sw->q) gncQueryDestroy (sw->q); @@ -848,6 +871,12 @@ gnc_search_dialog_init_widgets (GNCSearchWindow *sw) sw->add_rb = glade_xml_get_widget (xml, "add_search_radiobutton"); sw->del_rb = glade_xml_get_widget (xml, "delete_search_radiobutton"); + sw->active_only_check = glade_xml_get_widget (xml, "active_only_check"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sw->active_only_check), + gnc_lookup_boolean_option ("__gui", + "search_for_active_only", + TRUE)); + /* Deal with the cancel button */ sw->cancel_button = glade_xml_get_widget (xml, "cancel_button"); sw->close_button = glade_xml_get_widget (xml, "close_button"); @@ -877,6 +906,9 @@ gnc_search_dialog_init_widgets (GNCSearchWindow *sw) glade_xml_signal_connect_data (xml, "gnc_ui_search_type_cb", GTK_SIGNAL_FUNC (search_type_cb), sw); + glade_xml_signal_connect_data (xml, "gnc_ui_search_active_cb", + GTK_SIGNAL_FUNC (search_active_only_cb), sw); + glade_xml_signal_connect_data (xml, "gnc_ui_search_new_cb", GTK_SIGNAL_FUNC (search_new_item_cb), sw); diff --git a/src/gnome-search/search.glade b/src/gnome-search/search.glade index 8bfb008052..dde049e3af 100644 --- a/src/gnome-search/search.glade +++ b/src/gnome-search/search.glade @@ -443,6 +443,37 @@ False + + + GtkHSeparator + hseparator1 + + 0 + True + True + + + + + GtkCheckButton + active_only_check + Choose whether to search all your data or only that marked as "active" + True + + toggled + gnc_ui_search_active_cb + Search Dialog + Wed, 15 Jan 2003 03:21:35 GMT + + + True + True + + 0 + False + False + +