From f7a23755d0fa60c622cc3860f28ae86f7f73c8b0 Mon Sep 17 00:00:00 2001 From: Derek Atkins Date: Fri, 18 Oct 2002 03:27:49 +0000 Subject: [PATCH] * table-model.h -- add a flag for "READ_ONLY" cells, to all you to specify a cell as readonly. * table-allgui.c -- allow the cursor to enter a READ_ONLY cell. Make sure "editable" is FALSE for READ_ONLY cells. * split-register-model.c -- If the TxnType != NONE, set all cells as READ_ONLY. * fixes bugs 96024 and 96028 by making posted invoices and payments read-only. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7338 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 9 +++++ .../ledger-core/split-register-model.c | 36 ++++++++++++++++++- src/register/register-core/table-allgui.c | 9 +++++ src/register/register-core/table-model.h | 4 ++- 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36881babd4..33c3d0de93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,15 @@ known CRITICAL messages, which are safe to ignore.. * gnc-ledger-display.c -- honor user defaults for A/R and A/P windows + + * table-model.h -- add a flag for "READ_ONLY" cells, to all you to + specify a cell as readonly. + * table-allgui.c -- allow the cursor to enter a READ_ONLY cell. Make + sure "editable" is FALSE for READ_ONLY cells. + * split-register-model.c -- If the TxnType != NONE, set all cells as + READ_ONLY. + * fixes bugs 96024 and 96028 by making posted invoices and payments + read-only. 2002-10-16 Joshua Sled diff --git a/src/register/ledger-core/split-register-model.c b/src/register/ledger-core/split-register-model.c index 335812b32e..23e178d3b1 100644 --- a/src/register/ledger-core/split-register-model.c +++ b/src/register/ledger-core/split-register-model.c @@ -1330,10 +1330,32 @@ gnc_split_register_get_debcred_entry (VirtualLocation virt_loc, } } +static gboolean +gnc_split_register_cursor_is_readonly (VirtualLocation virt_loc, + gpointer user_data) +{ + SplitRegister *reg = user_data; + Split *split; + Transaction *txn; + char type; + + split = gnc_split_register_get_split (reg, virt_loc.vcell_loc); + if (!split) return FALSE; + + txn = xaccSplitGetParent (split); + if (!txn) return FALSE; + + type = xaccTransGetTxnType (txn); + return (type != TXN_TYPE_NONE); +} + static CellIOFlags gnc_split_register_get_inactive_io_flags (VirtualLocation virt_loc, gpointer user_data) { + if (gnc_split_register_cursor_is_readonly (virt_loc, user_data)) + return XACC_CELL_ALLOW_READ_ONLY; + return XACC_CELL_ALLOW_NONE; } @@ -1341,6 +1363,9 @@ static CellIOFlags gnc_split_register_get_standard_io_flags (VirtualLocation virt_loc, gpointer user_data) { + if (gnc_split_register_cursor_is_readonly (virt_loc, user_data)) + return XACC_CELL_ALLOW_READ_ONLY; + return XACC_CELL_ALLOW_ALL; } @@ -1348,6 +1373,9 @@ static CellIOFlags gnc_split_register_get_recn_io_flags (VirtualLocation virt_loc, gpointer user_data) { + if (gnc_split_register_cursor_is_readonly (virt_loc, user_data)) + return XACC_CELL_ALLOW_READ_ONLY; + return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY; } @@ -1365,7 +1393,7 @@ gnc_split_register_get_ddue_io_flags (VirtualLocation virt_loc, return XACC_CELL_ALLOW_NONE; } - return XACC_CELL_ALLOW_ALL; + return XACC_CELL_ALLOW_READ_ONLY; } static CellIOFlags @@ -1375,6 +1403,9 @@ gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc, SplitRegister *reg = user_data; Split *split; + if (gnc_split_register_cursor_is_readonly (virt_loc, user_data)) + return XACC_CELL_ALLOW_READ_ONLY; + split = gnc_split_register_get_split (reg, virt_loc.vcell_loc); if (safe_strcmp ("stock-split", xaccSplitGetType (split)) == 0) @@ -1389,6 +1420,9 @@ gnc_split_register_get_security_io_flags (VirtualLocation virt_loc, { SplitRegister *reg = user_data; + if (gnc_split_register_cursor_is_readonly (virt_loc, user_data)) + return XACC_CELL_ALLOW_READ_ONLY; + if (gnc_split_register_use_security_cells (reg, virt_loc)) return XACC_CELL_ALLOW_ALL; diff --git a/src/register/register-core/table-allgui.c b/src/register/register-core/table-allgui.c index 4a46114425..4b3217f45a 100644 --- a/src/register/register-core/table-allgui.c +++ b/src/register/register-core/table-allgui.c @@ -1022,6 +1022,10 @@ gnc_table_virtual_loc_valid(Table *table, if (gnc_table_model_read_only (table->model)) return TRUE; io_flags = gnc_table_get_io_flags (table, virt_loc); + + /* if the cell allows ENTER, then it is ok */ + if (io_flags & XACC_CELL_ALLOW_ENTER) return TRUE; + /* if cell is marked as output-only, you can't enter */ if (0 == (XACC_CELL_ALLOW_INPUT & io_flags)) return FALSE; @@ -1047,6 +1051,7 @@ gnc_table_enter_update (Table *table, CellBlock *cb; int cell_row; int cell_col; + CellIOFlags io_flags; if (table == NULL) return FALSE; @@ -1066,6 +1071,10 @@ gnc_table_enter_update (Table *table, if (!cell) return FALSE; + io_flags = gnc_table_get_io_flags (table, virt_loc); + if (io_flags == XACC_CELL_ALLOW_READ_ONLY) + return FALSE; + enter = cell->enter_cell; if (enter) diff --git a/src/register/register-core/table-model.h b/src/register/register-core/table-model.h index f8128b42cf..86dc0e31c3 100644 --- a/src/register/register-core/table-model.h +++ b/src/register/register-core/table-model.h @@ -36,7 +36,9 @@ typedef enum XACC_CELL_ALLOW_INPUT = 1 << 0, XACC_CELL_ALLOW_SHADOW = 1 << 1, XACC_CELL_ALLOW_ALL = XACC_CELL_ALLOW_INPUT | XACC_CELL_ALLOW_SHADOW, - XACC_CELL_ALLOW_EXACT_ONLY = 1 << 2 + XACC_CELL_ALLOW_EXACT_ONLY = 1 << 2, + XACC_CELL_ALLOW_ENTER = 1 << 3, + XACC_CELL_ALLOW_READ_ONLY = XACC_CELL_ALLOW_SHADOW | XACC_CELL_ALLOW_ENTER } CellIOFlags; typedef enum