Work on per-cell save handlers for tables.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6075 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-11-27 00:10:17 +00:00
parent 4a12e94726
commit 9f78f5afb2
6 changed files with 117 additions and 9 deletions

View File

@ -589,7 +589,7 @@ static void gnc_entry_ledger_model_new_handlers (TableModel *model)
model->cell_data_copy = ; model->cell_data_copy = ;
*/ */
model->save_handler = gnc_entry_ledger_save_cells; gnc_table_model_set_post_save_handler (model, gnc_entry_ledger_save_cells);
} }
/** Public Interface ***********************************************/ /** Public Interface ***********************************************/

View File

@ -588,7 +588,6 @@ gnc_split_register_layout_add_cells (SplitRegister *reg,
CELL_ALIGN_LEFT, CELL_ALIGN_LEFT,
FALSE, FALSE,
FALSE); FALSE);
} }
TableLayout * TableLayout *
@ -604,4 +603,3 @@ gnc_split_register_layout_new (SplitRegister *reg)
return layout; return layout;
} }

View File

@ -444,14 +444,15 @@ void
gnc_split_register_model_add_save_handlers (TableModel *model) gnc_split_register_model_add_save_handlers (TableModel *model)
{ {
g_return_if_fail (model != NULL); g_return_if_fail (model != NULL);
model->save_handler = gnc_split_register_save_cells; gnc_table_model_set_post_save_handler (model, gnc_split_register_save_cells);
} }
void void
gnc_template_register_model_add_save_handlers (TableModel *model) gnc_template_register_model_add_save_handlers (TableModel *model)
{ {
g_return_if_fail (model != NULL); g_return_if_fail (model != NULL);
model->save_handler = gnc_split_register_save_template_cells; gnc_table_model_set_post_save_handler
(model, gnc_split_register_save_template_cells);
} }
SRSaveData * SRSaveData *

View File

@ -526,12 +526,39 @@ gnc_table_get_cell_location (Table *table,
void void
gnc_table_save_cells (Table *table, gpointer save_data) gnc_table_save_cells (Table *table, gpointer save_data)
{ {
if (!table || !table->model->save_handler) TableSaveHandler save_handler;
GList * cells;
GList * node;
if (!table)
return; return;
gnc_table_leave_update (table, table->current_cursor_loc); gnc_table_leave_update (table, table->current_cursor_loc);
table->model->save_handler (save_data, table->model->handler_user_data); save_handler = gnc_table_model_get_pre_save_handler (table->model);
if (save_handler)
save_handler (save_data, table->model->handler_user_data);
cells = gnc_table_layout_get_cells (table->layout);
for (node = cells; node; node = node->next)
{
BasicCell * cell = node->data;
if (!cell) continue;
if (!gnc_table_layout_get_cell_changed (table->layout,
cell->cell_name, TRUE))
continue;
save_handler = gnc_table_model_get_save_handler (table->model,
cell->cell_name);
if (save_handler)
save_handler (save_data, table->model->handler_user_data);
}
save_handler = gnc_table_model_get_post_save_handler (table->model);
if (save_handler)
save_handler (save_data, table->model->handler_user_data);
} }
void void

View File

@ -410,7 +410,7 @@ gnc_table_model_set_default_cell_border_handler
TableGetCellBorderHandler TableGetCellBorderHandler
gnc_table_model_get_cell_border_handler (TableModel *model, gnc_table_model_get_cell_border_handler (TableModel *model,
const char * cell_name) const char * cell_name)
{ {
g_return_val_if_fail (model != NULL, NULL); g_return_val_if_fail (model != NULL, NULL);
@ -453,3 +453,65 @@ gnc_table_model_get_confirm_handler (TableModel *model,
return gnc_table_model_handler_hash_lookup (model->confirm_handlers, return gnc_table_model_handler_hash_lookup (model->confirm_handlers,
cell_name); cell_name);
} }
void
gnc_table_model_set_save_handler
(TableModel *model,
TableSaveHandler save_handler,
const char * cell_name)
{
g_return_if_fail (model != NULL);
g_return_if_fail (cell_name != NULL);
gnc_table_model_handler_hash_insert (model->save_handlers,
cell_name,
save_handler);
}
void
gnc_table_model_set_pre_save_handler
(TableModel *model,
TableSaveHandler save_handler)
{
g_return_if_fail (model != NULL);
model->pre_save_handler = save_handler;
}
void
gnc_table_model_set_post_save_handler
(TableModel *model,
TableSaveHandler save_handler)
{
g_return_if_fail (model != NULL);
model->post_save_handler = save_handler;
}
TableSaveHandler
gnc_table_model_get_save_handler
(TableModel *model,
const char * cell_name)
{
g_return_val_if_fail (model != NULL, NULL);
return gnc_table_model_handler_hash_lookup (model->save_handlers, cell_name);
}
TableSaveHandler
gnc_table_model_get_pre_save_handler
(TableModel *model)
{
g_return_val_if_fail (model != NULL, NULL);
return model->pre_save_handler;
}
TableSaveHandler
gnc_table_model_get_post_save_handler
(TableModel *model)
{
g_return_val_if_fail (model != NULL, NULL);
return model->post_save_handler;
}

View File

@ -102,7 +102,9 @@ typedef struct
GHashTable *cell_border_handlers; GHashTable *cell_border_handlers;
GHashTable *confirm_handlers; GHashTable *confirm_handlers;
TableSaveHandler save_handler; GHashTable *save_handlers;
TableSaveHandler pre_save_handler;
TableSaveHandler post_save_handler;
gpointer handler_user_data; gpointer handler_user_data;
@ -207,4 +209,22 @@ TableConfirmHandler gnc_table_model_get_confirm_handler
(TableModel *model, (TableModel *model,
const char * cell_name); const char * cell_name);
void gnc_table_model_set_save_handler
(TableModel *model,
TableSaveHandler save_handler,
const char * cell_name);
void gnc_table_model_set_pre_save_handler
(TableModel *model,
TableSaveHandler save_handler);
void gnc_table_model_set_post_save_handler
(TableModel *model,
TableSaveHandler save_handler);
TableSaveHandler gnc_table_model_get_save_handler
(TableModel *model,
const char * cell_name);
TableSaveHandler gnc_table_model_get_pre_save_handler
(TableModel *model);
TableSaveHandler gnc_table_model_get_post_save_handler
(TableModel *model);
#endif #endif