29 #include "table-model.h"
32 #define DEFAULT_HANDLER ""
42 gnc_table_model_handler_hash_new (
void)
44 return g_hash_table_new (g_str_hash, g_str_equal);
48 hash_destroy_helper (gpointer key, gpointer value, gpointer user_data)
52 g_free (node->cell_name);
53 node->cell_name = NULL;
59 gnc_table_model_handler_hash_destroy (GHashTable *hash)
63 g_hash_table_foreach (hash, hash_destroy_helper, NULL);
64 g_hash_table_destroy (hash);
68 gnc_table_model_handler_hash_remove (GHashTable *hash,
const char *cell_name)
74 node = g_hash_table_lookup (hash, cell_name);
77 g_hash_table_remove (hash, cell_name);
79 g_free (node->cell_name);
80 node->cell_name = NULL;
86 gnc_table_model_handler_hash_insert (GHashTable *hash,
87 const char *cell_name,
92 g_return_if_fail (hash != NULL);
93 g_return_if_fail (cell_name != NULL);
95 gnc_table_model_handler_hash_remove (hash, cell_name);
100 node->cell_name = g_strdup (cell_name);
101 node->handler = handler;
103 g_hash_table_insert (hash, node->cell_name, node);
107 gnc_table_model_handler_hash_lookup (GHashTable *hash,
const char *cell_name)
111 if (!hash)
return NULL;
115 node = g_hash_table_lookup (hash, cell_name);
116 if (node)
return node->handler;
119 cell_name = DEFAULT_HANDLER;
120 node = g_hash_table_lookup (hash, cell_name);
121 if (node)
return node->handler;
127 gnc_table_model_new (
void)
133 model->entry_handlers = gnc_table_model_handler_hash_new ();
134 model->label_handlers = gnc_table_model_handler_hash_new ();
135 model->help_handlers = gnc_table_model_handler_hash_new ();
136 model->io_flags_handlers = gnc_table_model_handler_hash_new ();
137 model->fg_color_handlers = gnc_table_model_handler_hash_new ();
138 model->bg_color_handlers = gnc_table_model_handler_hash_new ();
139 model->cell_border_handlers = gnc_table_model_handler_hash_new ();
140 model->confirm_handlers = gnc_table_model_handler_hash_new ();
141 model->save_handlers = gnc_table_model_handler_hash_new ();
143 model->read_only = FALSE;
144 model->dividing_row_upper = -1;
145 model->dividing_row = -1;
146 model->dividing_row_lower = -1;
156 gnc_table_model_handler_hash_destroy (model->entry_handlers);
157 model->entry_handlers = NULL;
159 gnc_table_model_handler_hash_destroy (model->label_handlers);
160 model->label_handlers = NULL;
162 gnc_table_model_handler_hash_destroy (model->help_handlers);
163 model->help_handlers = NULL;
165 gnc_table_model_handler_hash_destroy (model->io_flags_handlers);
166 model->io_flags_handlers = NULL;
168 gnc_table_model_handler_hash_destroy (model->fg_color_handlers);
169 model->fg_color_handlers = NULL;
171 gnc_table_model_handler_hash_destroy (model->bg_color_handlers);
172 model->bg_color_handlers = NULL;
174 gnc_table_model_handler_hash_destroy (model->cell_border_handlers);
175 model->cell_border_handlers = NULL;
177 gnc_table_model_handler_hash_destroy (model->confirm_handlers);
178 model->confirm_handlers = NULL;
180 gnc_table_model_handler_hash_destroy (model->save_handlers);
181 model->save_handlers = NULL;
187 gnc_table_model_set_read_only (
TableModel *model, gboolean read_only)
189 g_return_if_fail (model);
191 model->read_only = read_only;
197 g_return_val_if_fail (model, FALSE);
199 return model->read_only;
203 gnc_table_model_set_entry_handler (
TableModel *model,
204 TableGetEntryHandler entry_handler,
205 const char * cell_name)
207 g_return_if_fail (model != NULL);
208 g_return_if_fail (cell_name != NULL);
210 gnc_table_model_handler_hash_insert (model->entry_handlers,
216 gnc_table_model_set_default_entry_handler
217 (
TableModel *model, TableGetEntryHandler entry_handler)
219 g_return_if_fail (model != NULL);
221 gnc_table_model_handler_hash_insert (model->entry_handlers,
227 gnc_table_model_get_entry_handler (
TableModel *model,
const char * cell_name)
229 g_return_val_if_fail (model != NULL, NULL);
231 return gnc_table_model_handler_hash_lookup (model->entry_handlers,
236 gnc_table_model_set_label_handler (
TableModel *model,
237 TableGetLabelHandler label_handler,
238 const char * cell_name)
240 g_return_if_fail (model != NULL);
241 g_return_if_fail (cell_name != NULL);
243 gnc_table_model_handler_hash_insert (model->label_handlers,
249 gnc_table_model_set_default_label_handler
250 (
TableModel *model, TableGetLabelHandler label_handler)
252 g_return_if_fail (model != NULL);
254 gnc_table_model_handler_hash_insert (model->label_handlers,
260 gnc_table_model_get_label_handler (
TableModel *model,
const char * cell_name)
262 g_return_val_if_fail (model != NULL, NULL);
264 return gnc_table_model_handler_hash_lookup (model->label_handlers,
269 gnc_table_model_set_help_handler (
TableModel *model,
270 TableGetHelpHandler help_handler,
271 const char * cell_name)
273 g_return_if_fail (model != NULL);
274 g_return_if_fail (cell_name != NULL);
276 gnc_table_model_handler_hash_insert (model->help_handlers,
282 gnc_table_model_set_default_help_handler (
TableModel *model,
283 TableGetHelpHandler help_handler)
285 g_return_if_fail (model != NULL);
287 gnc_table_model_handler_hash_insert (model->help_handlers,
293 gnc_table_model_get_help_handler (
TableModel *model,
const char * cell_name)
295 g_return_val_if_fail (model != NULL, NULL);
297 return gnc_table_model_handler_hash_lookup (model->help_handlers, cell_name);
301 gnc_table_model_set_io_flags_handler
303 TableGetCellIOFlagsHandler io_flags_handler,
304 const char * cell_name)
306 g_return_if_fail (model != NULL);
307 g_return_if_fail (cell_name != NULL);
309 gnc_table_model_handler_hash_insert (model->io_flags_handlers,
315 gnc_table_model_set_default_io_flags_handler
317 TableGetCellIOFlagsHandler io_flags_handler)
319 g_return_if_fail (model != NULL);
321 gnc_table_model_handler_hash_insert (model->io_flags_handlers,
326 TableGetCellIOFlagsHandler
327 gnc_table_model_get_io_flags_handler (
TableModel *model,
328 const char * cell_name)
330 g_return_val_if_fail (model != NULL, NULL);
332 return gnc_table_model_handler_hash_lookup (model->io_flags_handlers,
337 gnc_table_model_set_fg_color_handler
339 TableGetFGColorHandler fg_color_handler,
340 const char * cell_name)
342 g_return_if_fail (model != NULL);
343 g_return_if_fail (cell_name != NULL);
345 gnc_table_model_handler_hash_insert (model->fg_color_handlers,
351 gnc_table_model_set_default_fg_color_handler
353 TableGetFGColorHandler fg_color_handler)
355 g_return_if_fail (model != NULL);
357 gnc_table_model_handler_hash_insert (model->fg_color_handlers,
362 TableGetFGColorHandler
363 gnc_table_model_get_fg_color_handler (
TableModel *model,
364 const char * cell_name)
366 g_return_val_if_fail (model != NULL, NULL);
368 return gnc_table_model_handler_hash_lookup (model->fg_color_handlers,
373 gnc_table_model_set_bg_color_handler
375 TableGetBGColorHandler bg_color_handler,
376 const char * cell_name)
378 g_return_if_fail (model != NULL);
379 g_return_if_fail (cell_name != NULL);
381 gnc_table_model_handler_hash_insert (model->bg_color_handlers,
387 gnc_table_model_set_default_bg_color_handler
389 TableGetBGColorHandler bg_color_handler)
391 g_return_if_fail (model != NULL);
393 gnc_table_model_handler_hash_insert (model->bg_color_handlers,
398 TableGetBGColorHandler
399 gnc_table_model_get_bg_color_handler (
TableModel *model,
400 const char * cell_name)
402 g_return_val_if_fail (model != NULL, NULL);
404 return gnc_table_model_handler_hash_lookup (model->bg_color_handlers,
409 gnc_table_model_set_cell_border_handler
411 TableGetCellBorderHandler cell_border_handler,
412 const char * cell_name)
414 g_return_if_fail (model != NULL);
415 g_return_if_fail (cell_name != NULL);
417 gnc_table_model_handler_hash_insert (model->cell_border_handlers,
419 cell_border_handler);
423 gnc_table_model_set_default_cell_border_handler
425 TableGetCellBorderHandler cell_border_handler)
427 g_return_if_fail (model != NULL);
429 gnc_table_model_handler_hash_insert (model->cell_border_handlers,
431 cell_border_handler);
434 TableGetCellBorderHandler
435 gnc_table_model_get_cell_border_handler (
TableModel *model,
436 const char * cell_name)
438 g_return_val_if_fail (model != NULL, NULL);
440 return gnc_table_model_handler_hash_lookup (model->cell_border_handlers,
445 gnc_table_model_set_confirm_handler
447 TableConfirmHandler confirm_handler,
448 const char * cell_name)
450 g_return_if_fail (model != NULL);
451 g_return_if_fail (cell_name != NULL);
453 gnc_table_model_handler_hash_insert (model->confirm_handlers,
459 gnc_table_model_set_default_confirm_handler
461 TableConfirmHandler confirm_handler)
463 g_return_if_fail (model != NULL);
465 gnc_table_model_handler_hash_insert (model->confirm_handlers,
471 gnc_table_model_get_confirm_handler (
TableModel *model,
472 const char * cell_name)
474 g_return_val_if_fail (model != NULL, NULL);
476 return gnc_table_model_handler_hash_lookup (model->confirm_handlers,
481 gnc_table_model_set_save_handler
483 TableSaveCellHandler save_handler,
484 const char * cell_name)
486 g_return_if_fail (model != NULL);
487 g_return_if_fail (cell_name != NULL);
489 gnc_table_model_handler_hash_insert (model->save_handlers,
495 gnc_table_model_set_pre_save_handler
497 TableSaveHandler save_handler)
499 g_return_if_fail (model != NULL);
501 model->pre_save_handler = save_handler;
505 gnc_table_model_set_post_save_handler
507 TableSaveHandler save_handler)
509 g_return_if_fail (model != NULL);
511 model->post_save_handler = save_handler;
515 gnc_table_model_get_save_handler
517 const char * cell_name)
519 g_return_val_if_fail (model != NULL, NULL);
521 return gnc_table_model_handler_hash_lookup (model->save_handlers, cell_name);
525 gnc_table_model_get_pre_save_handler
528 g_return_val_if_fail (model != NULL, NULL);
530 return model->pre_save_handler;
534 gnc_table_model_get_post_save_handler
537 g_return_val_if_fail (model != NULL, NULL);
539 return model->post_save_handler;