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:
Dave Peticolas 2001-09-02 07:28:35 +00:00
parent 996cc5de9d
commit c5106fd497
4 changed files with 190 additions and 58 deletions

View File

@ -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;

View File

@ -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 *

View File

@ -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);
}

View File

@ -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