mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
start making changes to eliminate topgroup from this struct
(this version produces run-time warnings, I'm fixing them). git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@8515 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
e43973c77a
commit
a91c6ef9ff
@ -29,7 +29,7 @@
|
||||
*
|
||||
* HISTORY:
|
||||
* Created by Linas Vepstas December 1998
|
||||
* Copyright (c) 1998-2001 Linas Vepstas
|
||||
* Copyright (c) 1998-2001,2003 Linas Vepstas <linas@linas.org>
|
||||
* Copyright (c) 2000 Dave Peticolas
|
||||
*/
|
||||
|
||||
@ -64,6 +64,46 @@
|
||||
|
||||
static short module = MOD_IO;
|
||||
|
||||
/* ====================================================================== */
|
||||
|
||||
static void
|
||||
gnc_book_populate (GNCBook *book)
|
||||
{
|
||||
gnc_book_set_group (book, xaccMallocAccountGroup(book));
|
||||
book->pricedb = gnc_pricedb_create(book);
|
||||
|
||||
book->sched_xactions = NULL;
|
||||
book->sx_notsaved = FALSE;
|
||||
book->template_group = xaccMallocAccountGroup(book);
|
||||
book->commodity_table = gnc_commodity_table_new ();
|
||||
|
||||
if(book->commodity_table)
|
||||
{
|
||||
if(!gnc_commodity_table_add_default_data(book->commodity_table))
|
||||
PWARN("unable to initialize book's commodity_table");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_book_depopulate (GNCBook *book)
|
||||
{
|
||||
AccountGroup *grp;
|
||||
|
||||
grp = gnc_book_get_group (book);
|
||||
xaccAccountGroupBeginEdit (grp);
|
||||
xaccAccountGroupDestroy (grp);
|
||||
|
||||
gnc_pricedb_destroy (book->pricedb);
|
||||
book->pricedb = NULL;
|
||||
|
||||
gnc_commodity_table_destroy (book->commodity_table);
|
||||
book->commodity_table = NULL;
|
||||
|
||||
/* FIXME: destroy SX data members here, too */
|
||||
|
||||
}
|
||||
|
||||
/* ====================================================================== */
|
||||
/* constructor / destructor */
|
||||
|
||||
@ -78,19 +118,9 @@ gnc_book_init (GNCBook *book)
|
||||
xaccStoreEntity(book->entity_table, book, &book->guid, GNC_ID_BOOK);
|
||||
|
||||
book->kvp_data = kvp_frame_new ();
|
||||
book->topgroup = xaccMallocAccountGroup(book);
|
||||
book->pricedb = gnc_pricedb_create(book);
|
||||
|
||||
book->sched_xactions = NULL;
|
||||
book->sx_notsaved = FALSE;
|
||||
book->template_group = xaccMallocAccountGroup(book);
|
||||
book->commodity_table = gnc_commodity_table_new ();
|
||||
|
||||
if(book->commodity_table)
|
||||
{
|
||||
if(!gnc_commodity_table_add_default_data(book->commodity_table))
|
||||
PWARN("unable to initialize book's commodity_table");
|
||||
}
|
||||
/* XXX this needs to go away */
|
||||
gnc_book_populate (book);
|
||||
|
||||
book->data_tables = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
@ -126,17 +156,8 @@ gnc_book_destroy (GNCBook *book)
|
||||
|
||||
gncObjectBookEnd (book);
|
||||
|
||||
xaccAccountGroupBeginEdit (book->topgroup);
|
||||
xaccAccountGroupDestroy (book->topgroup);
|
||||
book->topgroup = NULL;
|
||||
|
||||
gnc_pricedb_destroy (book->pricedb);
|
||||
book->pricedb = NULL;
|
||||
|
||||
gnc_commodity_table_destroy (book->commodity_table);
|
||||
book->commodity_table = NULL;
|
||||
|
||||
/* FIXME: destroy SX data members here, too */
|
||||
/* XXX this needs to go away */
|
||||
gnc_book_depopulate (book);
|
||||
|
||||
xaccRemoveEntity (book->entity_table, &book->guid);
|
||||
xaccEntityTableDestroy (book->entity_table);
|
||||
@ -175,17 +196,26 @@ gnc_book_get_entity_table (GNCBook *book)
|
||||
return book->entity_table;
|
||||
}
|
||||
|
||||
/* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */
|
||||
|
||||
#define GNC_COMMODITY_TABLE "gnc_commodity_table"
|
||||
gnc_commodity_table *
|
||||
gnc_book_get_commodity_table(GNCBook *book)
|
||||
{
|
||||
if (!book) return NULL;
|
||||
printf ("duude get commoity table\n");
|
||||
return book->commodity_table;
|
||||
return gnc_book_get_data (book, GNC_COMMODITY_TABLE);
|
||||
}
|
||||
|
||||
#define GNC_TOP_GROUP "gnc_top_group"
|
||||
AccountGroup *
|
||||
gnc_book_get_group (GNCBook *book)
|
||||
{
|
||||
if (!book) return NULL;
|
||||
printf ("duude get topgrp\n");
|
||||
if (book->topgroup != gnc_book_get_data (book, GNC_TOP_GROUP))
|
||||
printf ("duuuude major xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n");
|
||||
return book->topgroup;
|
||||
}
|
||||
|
||||
@ -193,6 +223,7 @@ GNCPriceDB *
|
||||
gnc_book_get_pricedb(GNCBook *book)
|
||||
{
|
||||
if (!book) return NULL;
|
||||
printf ("duude get pricedb\n");
|
||||
return book->pricedb;
|
||||
}
|
||||
|
||||
@ -237,14 +268,15 @@ gnc_book_set_group (GNCBook *book, AccountGroup *grp)
|
||||
{
|
||||
if (!book) return;
|
||||
|
||||
/* Do not free the old topgroup here unless you also fix
|
||||
* all the other uses of gnc_book_set_group!
|
||||
/* XXX Do not free the old topgroup here unless you also fix
|
||||
* all the other uses of gnc_book_set_group! That's because
|
||||
* the account group is not reference-counted, and there's some
|
||||
* chance that we'll leave a dangling pointer somewhere.
|
||||
*/
|
||||
|
||||
if (book->topgroup == grp)
|
||||
return;
|
||||
if (gnc_book_get_group (book) == grp) return;
|
||||
|
||||
if (grp->book != book)
|
||||
if (grp && grp->book != book)
|
||||
{
|
||||
PERR ("cannot mix and match books freely!");
|
||||
return;
|
||||
@ -260,6 +292,7 @@ gnc_book_set_group (GNCBook *book, AccountGroup *grp)
|
||||
*/
|
||||
|
||||
book->topgroup = grp;
|
||||
gnc_book_set_data (book, GNC_TOP_GROUP, grp);
|
||||
}
|
||||
|
||||
void
|
||||
@ -432,13 +465,18 @@ gnc_book_equal (GNCBook *book_1, GNCBook *book_2)
|
||||
/* ====================================================================== */
|
||||
|
||||
/* Store arbitrary pointers in the GNCBook for data storage extensibility */
|
||||
void gnc_book_set_data (GNCBook *book, const char *key, gpointer data)
|
||||
/* XXX if data is NULL, should we store a null pointer, or should
|
||||
* we remove the key from the hash table?
|
||||
*/
|
||||
void
|
||||
gnc_book_set_data (GNCBook *book, const char *key, gpointer data)
|
||||
{
|
||||
if (!book || !key || !data) return;
|
||||
if (!book || !key) return;
|
||||
g_hash_table_insert (book->data_tables, (gpointer)key, data);
|
||||
}
|
||||
|
||||
gpointer gnc_book_get_data (GNCBook *book, const char *key)
|
||||
gpointer
|
||||
gnc_book_get_data (GNCBook *book, const char *key)
|
||||
{
|
||||
if (!book || !key) return NULL;
|
||||
return g_hash_table_lookup (book->data_tables, (gpointer)key);
|
||||
|
Loading…
Reference in New Issue
Block a user