mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Remove more switch logic.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5258 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
996cc5de9d
commit
c5106fd497
@ -990,49 +990,44 @@ gnc_split_register_get_debcred_entry (VirtualLocation virt_loc,
|
||||
}
|
||||
|
||||
static CellIOFlags
|
||||
gnc_split_register_get_io_flags (VirtualLocation virt_loc, gpointer user_data)
|
||||
gnc_split_register_get_standard_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
}
|
||||
|
||||
static CellIOFlags
|
||||
gnc_split_register_get_recn_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
|
||||
}
|
||||
|
||||
static CellIOFlags
|
||||
gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
CellType cell_type;
|
||||
Split *split;
|
||||
|
||||
cell_type = gnc_table_get_cell_type (reg->table, virt_loc);
|
||||
split = sr_get_split (reg, virt_loc.vcell_loc);
|
||||
|
||||
switch (cell_type)
|
||||
{
|
||||
case DATE_CELL:
|
||||
case NUM_CELL:
|
||||
case DESC_CELL:
|
||||
case ACTN_CELL:
|
||||
case XFRM_CELL:
|
||||
case MEMO_CELL:
|
||||
case MXFRM_CELL:
|
||||
case NOTES_CELL:
|
||||
case FCRED_CELL:
|
||||
case FDEBT_CELL:
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
if (safe_strcmp ("stock-split", xaccSplitGetType (split)) == 0)
|
||||
return XACC_CELL_ALLOW_NONE;
|
||||
|
||||
case CRED_CELL:
|
||||
case DEBT_CELL:
|
||||
split = sr_get_split (reg, virt_loc.vcell_loc);
|
||||
if (safe_strcmp ("stock-split", xaccSplitGetType (split)) == 0)
|
||||
return XACC_CELL_ALLOW_NONE;
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
}
|
||||
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
static CellIOFlags
|
||||
gnc_split_register_get_security_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
|
||||
case RECN_CELL:
|
||||
return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
|
||||
if (use_security_cells (reg, virt_loc))
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
|
||||
case PRIC_CELL:
|
||||
case SHRS_CELL:
|
||||
if (use_security_cells (reg, virt_loc))
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
|
||||
return XACC_CELL_ALLOW_SHADOW;
|
||||
|
||||
default:
|
||||
return XACC_CELL_ALLOW_NONE;
|
||||
}
|
||||
return XACC_CELL_ALLOW_SHADOW;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -1393,10 +1388,75 @@ gnc_split_register_model_new (void)
|
||||
gnc_split_register_get_fcredit_label,
|
||||
FCRED_CELL);
|
||||
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
DATE_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
NUM_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
DESC_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
ACTN_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
XFRM_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
MEMO_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
MXFRM_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
NOTES_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_debcred_io_flags,
|
||||
CRED_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_debcred_io_flags,
|
||||
DEBT_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_recn_io_flags,
|
||||
RECN_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_security_io_flags,
|
||||
PRIC_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_security_io_flags,
|
||||
SHRS_CELL);
|
||||
|
||||
model->fg_color_handler = gnc_split_register_get_fg_color;
|
||||
model->bg_color_handler = gnc_split_register_get_bg_color;
|
||||
model->cell_border_handler = gnc_split_register_get_border;
|
||||
model->io_flag_handler = gnc_split_register_get_io_flags;
|
||||
model->confirm_handler = gnc_split_register_confirm;
|
||||
|
||||
model->cell_data_allocator = gnc_split_register_guid_malloc;
|
||||
@ -1435,6 +1495,16 @@ gnc_template_register_model_new (void)
|
||||
gnc_template_register_get_debcred_entry,
|
||||
CRED_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
FCRED_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
FDEBT_CELL);
|
||||
|
||||
gnc_template_register_model_add_save_handlers (model);
|
||||
|
||||
return model;
|
||||
|
@ -283,11 +283,20 @@ gnc_table_get_entry (Table *table, VirtualLocation virt_loc)
|
||||
CellIOFlags
|
||||
gnc_table_get_io_flags (Table *table, VirtualLocation virt_loc)
|
||||
{
|
||||
if (!table || !table->model->io_flag_handler)
|
||||
TableGetCellIOFlagsHandler io_flags_handler;
|
||||
int cell_type;
|
||||
|
||||
if (!table || !table->model)
|
||||
return XACC_CELL_ALLOW_NONE;
|
||||
|
||||
return table->model->io_flag_handler (virt_loc,
|
||||
table->model->handler_user_data);
|
||||
cell_type = gnc_table_get_cell_type (table, virt_loc);
|
||||
|
||||
io_flags_handler = gnc_table_model_get_io_flags_handler (table->model,
|
||||
cell_type);
|
||||
if (!io_flags_handler)
|
||||
return XACC_CELL_ALLOW_NONE;
|
||||
|
||||
return io_flags_handler (virt_loc, table->model->handler_user_data);
|
||||
}
|
||||
|
||||
const char *
|
||||
|
@ -80,7 +80,8 @@ gnc_table_model_handler_hash_insert (GHashTable *hash, int cell_type,
|
||||
{
|
||||
HandlerNode *node;
|
||||
|
||||
if (!hash) return;
|
||||
g_return_if_fail (hash != NULL);
|
||||
g_return_if_fail (cell_type >= 0);
|
||||
|
||||
gnc_table_model_handler_hash_remove (hash, cell_type);
|
||||
if (!handler) return;
|
||||
@ -119,6 +120,7 @@ gnc_table_model_new (void)
|
||||
|
||||
model->entry_handlers = gnc_table_model_handler_hash_new ();
|
||||
model->label_handlers = gnc_table_model_handler_hash_new ();
|
||||
model->io_flags_handlers = gnc_table_model_handler_hash_new ();
|
||||
|
||||
model->dividing_row = -1;
|
||||
|
||||
@ -136,6 +138,9 @@ gnc_table_model_destroy (TableModel *model)
|
||||
gnc_table_model_handler_hash_destroy (model->label_handlers);
|
||||
model->label_handlers = NULL;
|
||||
|
||||
gnc_table_model_handler_hash_destroy (model->io_flags_handlers);
|
||||
model->io_flags_handlers = NULL;
|
||||
|
||||
g_free (model);
|
||||
}
|
||||
|
||||
@ -145,7 +150,6 @@ gnc_table_model_set_entry_handler (TableModel *model,
|
||||
int cell_type)
|
||||
{
|
||||
g_return_if_fail (model != NULL);
|
||||
g_return_if_fail (cell_type >= 0);
|
||||
|
||||
gnc_table_model_handler_hash_insert (model->entry_handlers,
|
||||
cell_type,
|
||||
@ -178,7 +182,6 @@ gnc_table_model_set_label_handler (TableModel *model,
|
||||
int cell_type)
|
||||
{
|
||||
g_return_if_fail (model != NULL);
|
||||
g_return_if_fail (cell_type >= 0);
|
||||
|
||||
gnc_table_model_handler_hash_insert (model->label_handlers,
|
||||
cell_type,
|
||||
@ -204,3 +207,38 @@ gnc_table_model_get_label_handler (TableModel *model, int cell_type)
|
||||
return gnc_table_model_handler_hash_lookup (model->label_handlers,
|
||||
cell_type);
|
||||
}
|
||||
|
||||
void
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(TableModel *model,
|
||||
TableGetCellIOFlagsHandler io_flags_handler,
|
||||
int cell_type)
|
||||
{
|
||||
g_return_if_fail (model != NULL);
|
||||
|
||||
gnc_table_model_handler_hash_insert (model->io_flags_handlers,
|
||||
cell_type,
|
||||
io_flags_handler);
|
||||
}
|
||||
|
||||
void
|
||||
gnc_table_model_set_default_io_flags_handler
|
||||
(TableModel *model,
|
||||
TableGetCellIOFlagsHandler io_flags_handler)
|
||||
{
|
||||
g_return_if_fail (model != NULL);
|
||||
|
||||
gnc_table_model_handler_hash_insert (model->io_flags_handlers,
|
||||
DEFAULT_HANDLER,
|
||||
io_flags_handler);
|
||||
}
|
||||
|
||||
TableGetCellIOFlagsHandler
|
||||
gnc_table_model_get_io_flags_handler (TableModel *model,
|
||||
int cell_type)
|
||||
{
|
||||
g_return_val_if_fail (model != NULL, NULL);
|
||||
|
||||
return gnc_table_model_handler_hash_lookup (model->io_flags_handlers,
|
||||
cell_type);
|
||||
}
|
||||
|
@ -64,8 +64,8 @@ typedef const char * (*TableGetEntryHandler) (VirtualLocation virt_loc,
|
||||
typedef const char * (*TableGetLabelHandler) (VirtualLocation virt_loc,
|
||||
gpointer user_data);
|
||||
|
||||
typedef CellIOFlags (*TableGetCellIOFlags) (VirtualLocation virt_loc,
|
||||
gpointer user_data);
|
||||
typedef CellIOFlags (*TableGetCellIOFlagsHandler) (VirtualLocation virt_loc,
|
||||
gpointer user_data);
|
||||
|
||||
typedef guint32 (*TableGetFGColorHandler) (VirtualLocation virt_loc,
|
||||
gpointer user_data);
|
||||
@ -92,8 +92,8 @@ typedef struct
|
||||
{
|
||||
GHashTable *entry_handlers;
|
||||
GHashTable *label_handlers;
|
||||
GHashTable *io_flags_handlers;
|
||||
|
||||
TableGetCellIOFlags io_flag_handler;
|
||||
TableGetFGColorHandler fg_color_handler;
|
||||
TableGetBGColorHandler bg_color_handler;
|
||||
TableGetCellBorderHandler cell_border_handler;
|
||||
@ -115,22 +115,37 @@ typedef struct
|
||||
TableModel * gnc_table_model_new (void);
|
||||
void gnc_table_model_destroy (TableModel *model);
|
||||
|
||||
void gnc_table_model_set_entry_handler (TableModel *model,
|
||||
TableGetEntryHandler entry_handler,
|
||||
int cell_type);
|
||||
void gnc_table_model_set_entry_handler
|
||||
(TableModel *model,
|
||||
TableGetEntryHandler entry_handler,
|
||||
int cell_type);
|
||||
void gnc_table_model_set_default_entry_handler
|
||||
(TableModel *model,
|
||||
TableGetEntryHandler entry_handler);
|
||||
TableGetEntryHandler gnc_table_model_get_entry_handler (TableModel *model,
|
||||
int cell_type);
|
||||
(TableModel *model,
|
||||
TableGetEntryHandler entry_handler);
|
||||
TableGetEntryHandler gnc_table_model_get_entry_handler
|
||||
(TableModel *model,
|
||||
int cell_type);
|
||||
|
||||
void gnc_table_model_set_label_handler (TableModel *model,
|
||||
TableGetLabelHandler label_handler,
|
||||
int cell_type);
|
||||
void gnc_table_model_set_label_handler
|
||||
(TableModel *model,
|
||||
TableGetLabelHandler label_handler,
|
||||
int cell_type);
|
||||
void gnc_table_model_set_default_label_handler
|
||||
(TableModel *model,
|
||||
TableGetLabelHandler label_handler);
|
||||
TableGetLabelHandler gnc_table_model_get_label_handler (TableModel *model,
|
||||
int cell_type);
|
||||
(TableModel *model,
|
||||
TableGetLabelHandler label_handler);
|
||||
TableGetLabelHandler gnc_table_model_get_label_handler
|
||||
(TableModel *model,
|
||||
int cell_type);
|
||||
|
||||
void gnc_table_model_set_io_flags_handler
|
||||
(TableModel *model,
|
||||
TableGetCellIOFlagsHandler io_flags_handler,
|
||||
int cell_type);
|
||||
void gnc_table_model_set_default_io_flags_handler
|
||||
(TableModel *model,
|
||||
TableGetCellIOFlagsHandler io_flags_handler);
|
||||
TableGetCellIOFlagsHandler gnc_table_model_get_io_flags_handler
|
||||
(TableModel *model,
|
||||
int cell_type);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user