diff --git a/ChangeLog b/ChangeLog index 8289889955..2bfdc9c96d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-01-04 David Hampton + + * src/register/register-gnome/combocell-gnome.c: + * src/register/register-gnome/gnucash-item-list.[ch]: + * src/register/ledger-core/split-register-load.c: + * src/register/register-core/combocell.h: Load the entire data set + into the combocell before enabling sorting. Saves a tremendous + amount of time. + + * src/backend/file/gnc-transaction-xml-v2.c: + * lib/libqof/qof/gnc-numeric.c: A couple of performance tweaks. + 2006-01-03 Joshua Sled * gnc-sxed-window-ui.xml: Remove unreferenced `TransactionAction`. diff --git a/src/register/ledger-core/split-register-load.c b/src/register/ledger-core/split-register-load.c index c6722c2b95..f26c9dc0da 100644 --- a/src/register/ledger-core/split-register-load.c +++ b/src/register/ledger-core/split-register-load.c @@ -587,15 +587,19 @@ gnc_split_register_load_xfer_cells (SplitRegister *reg, Account *base_account) cell = (ComboCell *) gnc_table_layout_get_cell (reg->table->layout, XFRM_CELL); + gnc_combo_cell_set_sort_enabled (cell, FALSE); gnc_combo_cell_clear_menu (cell); gnc_combo_cell_use_quickfill_cache (cell, qf); xaccGroupForEachAccount (group, load_xfer_cell_cb, cell, TRUE); + gnc_combo_cell_set_sort_enabled (cell, TRUE); cell = (ComboCell *) gnc_table_layout_get_cell (reg->table->layout, MXFRM_CELL); + gnc_combo_cell_set_sort_enabled (cell, FALSE); gnc_combo_cell_clear_menu (cell); gnc_combo_cell_use_quickfill_cache (cell, qf); xaccGroupForEachAccount (group, load_xfer_cell_cb, cell, TRUE); + gnc_combo_cell_set_sort_enabled (cell, TRUE); } /* ====================== END OF FILE ================================== */ diff --git a/src/register/register-core/combocell.h b/src/register/register-core/combocell.h index d2d613830c..a6f6ea4e06 100644 --- a/src/register/register-core/combocell.h +++ b/src/register/register-core/combocell.h @@ -64,6 +64,10 @@ void gnc_combo_cell_add_menu_item (ComboCell *cell, char * menustr); * ignore the characters normally used to separate account names. */ void gnc_combo_cell_add_account_menu_item (ComboCell *cell, char * menustr); +/** Enable sorting of the menu item's contents. Loading the item is + * much faster with sorting disabled. */ +void gnc_combo_cell_set_sort_enabled (ComboCell *cell, gboolean enabled); + /** Determines whether the cell will accept strings not in the * menu. Defaults to strict, i.e., only menu items are accepted. */ void gnc_combo_cell_set_strict (ComboCell *cell, gboolean strict); diff --git a/src/register/register-gnome/combocell-gnome.c b/src/register/register-gnome/combocell-gnome.c index 1f517a5d5e..bfb7a7e9c4 100644 --- a/src/register/register-gnome/combocell-gnome.c +++ b/src/register/register-gnome/combocell-gnome.c @@ -350,6 +350,23 @@ gnc_combo_cell_destroy (BasicCell *bcell) cell->cell.gui_realize = NULL; } +void +gnc_combo_cell_set_sort_enabled (ComboCell *cell, gboolean enabled) +{ + PopBox *box; + + if (cell == NULL) + return; + + box = cell->cell.gui_private; + if (box->item_list == NULL) + return; + + block_list_signals (cell); + gnc_item_list_set_sort_enabled(box->item_list, enabled); + unblock_list_signals (cell); +} + void gnc_combo_cell_clear_menu (ComboCell * cell) { diff --git a/src/register/register-gnome/gnucash-item-list.c b/src/register/register-gnome/gnucash-item-list.c index e3ee317e05..1128315c10 100644 --- a/src/register/register-gnome/gnucash-item-list.c +++ b/src/register/register-gnome/gnucash-item-list.c @@ -82,6 +82,24 @@ gnc_item_list_append (GncItemList *item_list, char *string) } +void +gnc_item_list_set_sort_enabled(GncItemList *item_list, gboolean enabled) +{ + printf("%s: item_list %p, sort enabled %d\n", __FUNCTION__, item_list, enabled); + if (enabled) { + gtk_tree_sortable_set_sort_column_id + (GTK_TREE_SORTABLE (item_list->list_store), + 0, + GTK_SORT_ASCENDING); + } else { + gtk_tree_sortable_set_sort_column_id + (GTK_TREE_SORTABLE (item_list->list_store), + GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, + GTK_SORT_ASCENDING); + } +} + + typedef struct _findSelectionData { GncItemList *item_list; @@ -403,9 +421,8 @@ gnc_item_list_new(GnomeCanvasGroup *parent) list_store = gtk_list_store_new (1, G_TYPE_STRING); tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store), - 0, - GTK_SORT_ASCENDING); + /* Removed code to enable sorting. Enable it after the list is + * fully populated by calling gnc_item_list_finished_loading(). */ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)), diff --git a/src/register/register-gnome/gnucash-item-list.h b/src/register/register-gnome/gnucash-item-list.h index d45106c998..bb2c8a8124 100644 --- a/src/register/register-gnome/gnucash-item-list.h +++ b/src/register/register-gnome/gnucash-item-list.h @@ -65,6 +65,8 @@ void gnc_item_list_clear (GncItemList *item_list); void gnc_item_list_append (GncItemList *item_list, char *string); +void gnc_item_list_set_sort_enabled(GncItemList *item_list, gboolean enabled); + void gnc_item_list_select (GncItemList *item_list, const char *string); void gnc_item_list_show_selected (GncItemList *item_list);