From 348e88d83d9a2f96b61b4702dc401f623e7c7fd6 Mon Sep 17 00:00:00 2001 From: David Hampton Date: Tue, 12 Nov 2002 18:21:45 +0000 Subject: [PATCH] Fix register problem where the transfer field (on the last line if in a multi-line split) ignores whatever the user entered if you leave the cell with the key instead of the key. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7473 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 18 +++++- .../ledger-core/split-register-control.c | 39 +----------- src/register/ledger-core/split-register-p.h | 2 + src/register/ledger-core/split-register.c | 60 +++++++++++++++++-- 4 files changed, 76 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index ae8cb7070e..fe69996d9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,16 +1,28 @@ +2002-11-12 David Hampton + + * src/register/ledger-core/split-register-control.c + (gnc_split_register_traverse): Move the checking for non-existent + and placeholder accounts to a separate function, and call that new + function. + + * src/register/ledger-core/split-register.c + (gnc_split_register_cancel_cursor_trans_changes): Do a full + refresh after calling this function. Cleans up some gui leftovers + after a delete. (gnc_split_register_get_account_by_name): Add the + new function that checks for non-existent and placeholder + accounts. (gnc_split_register_get_account): Call the new function + to get the addditional checks. This solves #92157. + 2002-11-12 Benoit Grégoire * src/import-export/Transaction-matcher.c: Fix previous patch. gcc 3.2 is too forgiving... -2002-11-12 Benoit Grégoire * src/import-export/Transaction-matcher.c: Dynamically generate a pixmap to display match confidence graphically. -2002-11-12 Benoit Grégoire * src/import-export/ofx/gnc-ofx-import.c: Fix call to g_strdup_printf in Christian's 2002-11-03 translation patch. -2002-11-12 Benoit Grégoire * src/import-export/Transaction-matcher.c * src/import-export/generic-import.glade: First round of transaction matcher UI changes. Create a pseudo-widget in first diff --git a/src/register/ledger-core/split-register-control.c b/src/register/ledger-core/split-register-control.c index 4b2e9981fb..d933c1f87f 100644 --- a/src/register/ledger-core/split-register-control.c +++ b/src/register/ledger-core/split-register-control.c @@ -884,7 +884,6 @@ gnc_split_register_traverse (VirtualLocation *p_new_virt_loc, do { ComboCell *cell; - Account *account; char *name; @@ -919,41 +918,9 @@ gnc_split_register_traverse (VirtualLocation *p_new_virt_loc, safe_strcmp (name, STOCK_SPLIT_STR) == 0) break; - account = xaccGetAccountFromFullName (gnc_get_current_group (), - cell->cell.value, - gnc_get_account_separator ()); - if (account) - { - if (xaccAccountGetPlaceholder (account)) - { - const char *format = _("The account %s does not allow transactions.\n"); - gnc_error_dialog_parented (GTK_WINDOW(gnc_split_register_get_parent (reg)), - format, name); - } - break; - } - else - { - const char *format = _("The account %s does not exist.\n" - "Would you like to create it?"); - if (!gnc_verify_dialog_parented (gnc_split_register_get_parent (reg), - TRUE, format, name)) - break; - } - - info->full_refresh = FALSE; - - account = gnc_ui_new_accounts_from_name_window (name); - if (!account) - break; - - info->full_refresh = TRUE; - - name = xaccAccountGetFullName (account, gnc_get_account_separator ()); - gnc_combo_cell_set_value (cell, name); - gnc_basic_cell_set_changed (&cell->cell, TRUE); - g_free (name); - + /* Create the account if necessary. Also checks for a placeholder */ + (void) gnc_split_register_get_account_by_name (reg, (BasicCell *)cell, cell->cell.value, + &info->full_refresh); } while (FALSE); /* See if we are tabbing off the end of the very last line */ diff --git a/src/register/ledger-core/split-register-p.h b/src/register/ledger-core/split-register-p.h index 69f1a988ad..f3b4b1989c 100644 --- a/src/register/ledger-core/split-register-p.h +++ b/src/register/ledger-core/split-register-p.h @@ -147,6 +147,8 @@ CellBlock * gnc_split_register_get_active_cursor (SplitRegister *reg); void gnc_split_register_set_last_num (SplitRegister *reg, const char *num); +Account * gnc_split_register_get_account_by_name (SplitRegister *reg, BasicCell * cell, + const char *name, gboolean *new); Account * gnc_split_register_get_account (SplitRegister *reg, const char *cell_name); diff --git a/src/register/ledger-core/split-register.c b/src/register/ledger-core/split-register.c index 56a42e761d..0b2a56c12d 100644 --- a/src/register/ledger-core/split-register.c +++ b/src/register/ledger-core/split-register.c @@ -1104,6 +1104,7 @@ gnc_split_register_cancel_cursor_trans_changes (SplitRegister *reg) xaccTransRollbackEdit (pending_trans); info->pending_trans_guid = *xaccGUIDNULL (); + info->full_refresh = TRUE; gnc_resume_gui_refresh (); } @@ -1470,18 +1471,69 @@ gnc_split_register_save (SplitRegister *reg, gboolean do_commit) return TRUE; } + +Account * +gnc_split_register_get_account_by_name (SplitRegister *reg, BasicCell * bcell, + const char *name, gboolean *new) +{ + const char *placeholder = _("The account %s does not allow transactions.\n"); + const char *missing = _("The account %s does not exist.\n" + "Would you like to create it?"); + char *fullname; + ComboCell *cell = (ComboCell *) bcell; + Account *account; + + /* No changes, as yet. */ + *new = FALSE; + + /* Find the account */ + account = xaccGetAccountFromFullName (gnc_get_current_group (), + name, gnc_get_account_separator ()); + + if (!account) { + /* Ask if they want to create a new one. */ + if (!gnc_verify_dialog_parented (gnc_split_register_get_parent (reg), + TRUE, missing, name)) + return NULL; + + /* User said yes, they want to create a new account. */ + account = gnc_ui_new_accounts_from_name_window (name); + if (!account) + return NULL; + *new = TRUE; + + /* Now have a new account. Update the cell with the name as created. */ + fullname = xaccAccountGetFullName (account, gnc_get_account_separator ()); + gnc_combo_cell_set_value (cell, fullname); + gnc_basic_cell_set_changed (&cell->cell, TRUE); + g_free (fullname); + } + + /* See if the account (either old or new) is a placeholder. */ + if (xaccAccountGetPlaceholder (account)) { + gnc_error_dialog_parented (GTK_WINDOW(gnc_split_register_get_parent (reg)), + placeholder, name); + } + + /* Be seeing you. */ + return account; +} + Account * gnc_split_register_get_account (SplitRegister *reg, const char * cell_name) { + BasicCell *cell; const char *name; + gboolean dummy; if (!gnc_table_layout_get_cell_changed (reg->table->layout, cell_name, TRUE)) return NULL; - name = gnc_table_layout_get_cell_value (reg->table->layout, cell_name); - - return xaccGetAccountFromFullName (gnc_get_current_group (), - name, gnc_get_account_separator ()); + cell = gnc_table_layout_get_cell (reg->table->layout, cell_name); + if (!cell) + return NULL; + name = gnc_basic_cell_get_value (cell); + return gnc_split_register_get_account_by_name (reg, cell, name, &dummy); } static gboolean