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->save_handler = gnc_entry_ledger_save_cells;
gnc_table_model_set_post_save_handler (model, gnc_entry_ledger_save_cells);
}
/** Public Interface ***********************************************/

View File

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

View File

@ -444,14 +444,15 @@ void
gnc_split_register_model_add_save_handlers (TableModel *model)
{
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
gnc_template_register_model_add_save_handlers (TableModel *model)
{
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 *

View File

@ -526,12 +526,39 @@ gnc_table_get_cell_location (Table *table,
void
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;
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

View File

@ -410,7 +410,7 @@ gnc_table_model_set_default_cell_border_handler
TableGetCellBorderHandler
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);
@ -453,3 +453,65 @@ gnc_table_model_get_confirm_handler (TableModel *model,
return gnc_table_model_handler_hash_lookup (model->confirm_handlers,
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 *confirm_handlers;
TableSaveHandler save_handler;
GHashTable *save_handlers;
TableSaveHandler pre_save_handler;
TableSaveHandler post_save_handler;
gpointer handler_user_data;
@ -207,4 +209,22 @@ TableConfirmHandler gnc_table_model_get_confirm_handler
(TableModel *model,
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