mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Generalize gtable with user_data pointer.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2989 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
408ead8ac3
commit
85f6910871
@ -53,7 +53,7 @@ gnc_cellblock_new (int rows, int cols)
|
||||
/* =================================================== */
|
||||
|
||||
static gpointer
|
||||
gnc_cellblock_cell_new (void)
|
||||
gnc_cellblock_cell_new (gpointer user_data)
|
||||
{
|
||||
CellBlockCell *cb_cell;
|
||||
|
||||
@ -70,7 +70,7 @@ gnc_cellblock_cell_new (void)
|
||||
/* =================================================== */
|
||||
|
||||
static void
|
||||
gnc_cellblock_cell_free (gpointer _cb_cell)
|
||||
gnc_cellblock_cell_free (gpointer _cb_cell, gpointer user_data)
|
||||
{
|
||||
CellBlockCell *cb_cell = _cb_cell;
|
||||
|
||||
@ -88,7 +88,7 @@ gnc_cellblock_cell_free (gpointer _cb_cell)
|
||||
/* =================================================== */
|
||||
|
||||
static gpointer
|
||||
gnc_cell_traverse_info_new (void)
|
||||
gnc_cell_traverse_info_new (gpointer user_data)
|
||||
{
|
||||
CellTraverseInfo *ct_info;
|
||||
|
||||
@ -100,7 +100,7 @@ gnc_cell_traverse_info_new (void)
|
||||
/* =================================================== */
|
||||
|
||||
static void
|
||||
gnc_cell_traverse_info_free (gpointer ct_info)
|
||||
gnc_cell_traverse_info_free (gpointer ct_info, gpointer user_data)
|
||||
{
|
||||
g_free (ct_info);
|
||||
}
|
||||
@ -126,12 +126,12 @@ gnc_cellblock_init (CellBlock *cellblock, int rows, int cols)
|
||||
|
||||
/* malloc new cell table */
|
||||
cellblock->cb_cells = g_table_new (gnc_cellblock_cell_new,
|
||||
gnc_cellblock_cell_free);
|
||||
gnc_cellblock_cell_free, NULL);
|
||||
g_table_resize (cellblock->cb_cells, rows, cols);
|
||||
|
||||
/* malloc new traversal table */
|
||||
cellblock->traverse_info = g_table_new (gnc_cell_traverse_info_new,
|
||||
gnc_cell_traverse_info_free);
|
||||
gnc_cell_traverse_info_free, NULL);
|
||||
g_table_resize (cellblock->traverse_info, rows, cols);
|
||||
|
||||
for (row = 0; row < rows; row++)
|
||||
|
@ -2131,7 +2131,7 @@ gnucash_sheet_set_scroll_region (GnucashSheet *sheet)
|
||||
}
|
||||
|
||||
static gpointer
|
||||
sheet_block_cell_new (void)
|
||||
sheet_block_cell_new (gpointer user_data)
|
||||
{
|
||||
SheetBlockCell *sb_cell;
|
||||
|
||||
@ -2141,13 +2141,13 @@ sheet_block_cell_new (void)
|
||||
}
|
||||
|
||||
static void
|
||||
sheet_block_cell_free (gpointer block)
|
||||
sheet_block_cell_free (gpointer block, gpointer user_data)
|
||||
{
|
||||
g_free(block);
|
||||
}
|
||||
|
||||
static void
|
||||
gnucash_sheet_block_free (gpointer _block)
|
||||
gnucash_sheet_block_free (gpointer _block, gpointer user_data)
|
||||
{
|
||||
SheetBlock *block = _block;
|
||||
|
||||
@ -2165,14 +2165,14 @@ gnucash_sheet_block_free (gpointer _block)
|
||||
}
|
||||
|
||||
static gpointer
|
||||
gnucash_sheet_block_new (void)
|
||||
gnucash_sheet_block_new (gpointer user_data)
|
||||
{
|
||||
SheetBlock *block;
|
||||
|
||||
block = g_new0 (SheetBlock, 1);
|
||||
|
||||
block->block_cells = g_table_new (sheet_block_cell_new,
|
||||
sheet_block_cell_free);
|
||||
sheet_block_cell_free, NULL);
|
||||
|
||||
return block;
|
||||
}
|
||||
@ -2393,7 +2393,7 @@ gnucash_sheet_init (GnucashSheet *sheet)
|
||||
sheet->smooth_scroll = TRUE;
|
||||
|
||||
sheet->blocks = g_table_new(gnucash_sheet_block_new,
|
||||
gnucash_sheet_block_free);
|
||||
gnucash_sheet_block_free, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -67,7 +67,7 @@ style_get_key (SheetBlockStyle *style)
|
||||
|
||||
|
||||
static gpointer
|
||||
cell_dimensions_new (void)
|
||||
cell_dimensions_new (gpointer user_data)
|
||||
{
|
||||
CellDimensions *cd;
|
||||
|
||||
@ -79,7 +79,7 @@ cell_dimensions_new (void)
|
||||
}
|
||||
|
||||
static void
|
||||
cell_dimensions_free (gpointer cd)
|
||||
cell_dimensions_free (gpointer cd, gpointer user_data)
|
||||
{
|
||||
g_free(cd);
|
||||
}
|
||||
@ -95,7 +95,7 @@ style_dimensions_new (SheetBlockStyle *style)
|
||||
dimensions->ncols = style->ncols;
|
||||
|
||||
dimensions->cell_dimensions = g_table_new (cell_dimensions_new,
|
||||
cell_dimensions_free);
|
||||
cell_dimensions_free, NULL);
|
||||
|
||||
g_table_resize (dimensions->cell_dimensions,
|
||||
style->nrows, style->ncols);
|
||||
@ -618,7 +618,7 @@ gnucash_style_get_cell_style (SheetBlockStyle *style, int row, int col)
|
||||
}
|
||||
|
||||
static gpointer
|
||||
cell_style_new (void)
|
||||
cell_style_new (gpointer user_data)
|
||||
{
|
||||
CellStyle *cs;
|
||||
|
||||
@ -628,7 +628,7 @@ cell_style_new (void)
|
||||
}
|
||||
|
||||
static void
|
||||
cell_style_free (gpointer _cs)
|
||||
cell_style_free (gpointer _cs, gpointer user_data)
|
||||
{
|
||||
CellStyle *cs = _cs;
|
||||
|
||||
@ -659,7 +659,8 @@ gnucash_sheet_style_new (GnucashSheet *sheet, CellBlock *cursor,
|
||||
style->nrows = cursor->num_rows;
|
||||
style->ncols = cursor->num_cols;
|
||||
|
||||
style->cell_styles = g_table_new (cell_style_new, cell_style_free);
|
||||
style->cell_styles = g_table_new (cell_style_new,
|
||||
cell_style_free, NULL);
|
||||
g_table_resize (style->cell_styles, style->nrows, style->ncols);
|
||||
|
||||
gnucash_sheet_style_recompile(style, sr, cursor_type);
|
||||
|
@ -32,11 +32,14 @@ struct GTable
|
||||
|
||||
g_table_allocator allocator;
|
||||
g_table_deallocator deallocator;
|
||||
|
||||
gpointer user_data;
|
||||
};
|
||||
|
||||
GTable *
|
||||
g_table_new (g_table_allocator allocator,
|
||||
g_table_deallocator deallocator)
|
||||
g_table_deallocator deallocator,
|
||||
gpointer user_data)
|
||||
{
|
||||
GTable *gtable;
|
||||
|
||||
@ -53,6 +56,8 @@ g_table_new (g_table_allocator allocator,
|
||||
gtable->allocator = allocator;
|
||||
gtable->deallocator = deallocator;
|
||||
|
||||
gtable->user_data = user_data;
|
||||
|
||||
return gtable;
|
||||
}
|
||||
|
||||
@ -115,7 +120,7 @@ g_table_resize (GTable *gtable, int rows, int cols)
|
||||
|
||||
tcp = >able->array->pdata[new_len];
|
||||
for (i = new_len; i < old_len; i++, tcp++)
|
||||
gtable->deallocator(*tcp);
|
||||
gtable->deallocator(*tcp, gtable->user_data);
|
||||
}
|
||||
|
||||
/* Change the size */
|
||||
@ -129,7 +134,7 @@ g_table_resize (GTable *gtable, int rows, int cols)
|
||||
|
||||
tcp = >able->array->pdata[old_len];
|
||||
for (i = old_len; i < new_len; i++, tcp++)
|
||||
*tcp = gtable->allocator();
|
||||
*tcp = gtable->allocator(gtable->user_data);
|
||||
}
|
||||
|
||||
gtable->rows = rows;
|
||||
|
@ -31,15 +31,16 @@
|
||||
|
||||
typedef struct GTable GTable;
|
||||
|
||||
typedef gpointer (*g_table_allocator) (void);
|
||||
typedef void (*g_table_deallocator) (gpointer);
|
||||
typedef gpointer (*g_table_allocator) (gpointer user_data);
|
||||
typedef void (*g_table_deallocator) (gpointer entry, gpointer user_data);
|
||||
|
||||
|
||||
/* Create a new table with the given allocator and deallocator.
|
||||
* Both functions must be given. They are used to populate the
|
||||
* table and free extra members when resizing and destroying. */
|
||||
GTable * g_table_new (g_table_allocator allocator,
|
||||
g_table_deallocator deallocator);
|
||||
g_table_deallocator deallocator,
|
||||
gpointer user_data);
|
||||
|
||||
/* Free the table and all associated table elements. */
|
||||
void g_table_destroy (GTable *gtable);
|
||||
|
@ -63,10 +63,10 @@ static GMemChunk *cell_mem_chunk = NULL;
|
||||
/** Prototypes *********************************************************/
|
||||
static void gnc_table_init (Table * table);
|
||||
static void gnc_table_free_data (Table * table);
|
||||
static gpointer gnc_virtual_cell_new (void);
|
||||
static gpointer gnc_physical_cell_new (void);
|
||||
static void gnc_virtual_cell_free (gpointer tcell);
|
||||
static void gnc_physical_cell_free (gpointer tcell);
|
||||
static gpointer gnc_virtual_cell_new (gpointer user_data);
|
||||
static gpointer gnc_physical_cell_new (gpointer user_data);
|
||||
static void gnc_virtual_cell_free (gpointer tcell, gpointer user_data);
|
||||
static void gnc_physical_cell_free (gpointer tcell, gpointer user_data);
|
||||
static void gnc_table_resize (Table * table,
|
||||
int new_phys_rows, int new_phys_cols,
|
||||
int new_virt_rows, int new_virt_cols);
|
||||
@ -88,10 +88,10 @@ gnc_table_new (void)
|
||||
gnc_table_init (table);
|
||||
|
||||
table->virt_cells = g_table_new(gnc_virtual_cell_new,
|
||||
gnc_virtual_cell_free);
|
||||
gnc_virtual_cell_free, NULL);
|
||||
|
||||
table->phys_cells = g_table_new(gnc_physical_cell_new,
|
||||
gnc_physical_cell_free);
|
||||
gnc_physical_cell_free, NULL);
|
||||
|
||||
return table;
|
||||
}
|
||||
@ -277,7 +277,7 @@ gnc_physical_location_init (PhysicalLocation *ploc)
|
||||
/* ==================================================== */
|
||||
|
||||
static gpointer
|
||||
gnc_virtual_cell_new (void)
|
||||
gnc_virtual_cell_new (gpointer user_data)
|
||||
{
|
||||
TableCell *tcell;
|
||||
VirtualCell *vcell;
|
||||
@ -297,7 +297,7 @@ gnc_virtual_cell_new (void)
|
||||
/* ==================================================== */
|
||||
|
||||
static void
|
||||
gnc_virtual_cell_free (gpointer tcell)
|
||||
gnc_virtual_cell_free (gpointer tcell, gpointer user_data)
|
||||
{
|
||||
if (tcell == NULL)
|
||||
return;
|
||||
@ -308,7 +308,7 @@ gnc_virtual_cell_free (gpointer tcell)
|
||||
/* ==================================================== */
|
||||
|
||||
static gpointer
|
||||
gnc_physical_cell_new (void)
|
||||
gnc_physical_cell_new (gpointer user_data)
|
||||
{
|
||||
TableCell *tcell;
|
||||
PhysicalCell *pcell;
|
||||
@ -331,7 +331,7 @@ gnc_physical_cell_new (void)
|
||||
/* ==================================================== */
|
||||
|
||||
static void
|
||||
gnc_physical_cell_free (gpointer _tcell)
|
||||
gnc_physical_cell_free (gpointer _tcell, gpointer user_data)
|
||||
{
|
||||
TableCell *tcell = _tcell;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user