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:
Linas Vepstas 2003-06-10 01:30:47 +00:00
parent e43973c77a
commit a91c6ef9ff

View File

@ -29,7 +29,7 @@
* *
* HISTORY: * HISTORY:
* Created by Linas Vepstas December 1998 * 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 * Copyright (c) 2000 Dave Peticolas
*/ */
@ -64,6 +64,46 @@
static short module = MOD_IO; 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 */ /* constructor / destructor */
@ -78,19 +118,9 @@ gnc_book_init (GNCBook *book)
xaccStoreEntity(book->entity_table, book, &book->guid, GNC_ID_BOOK); xaccStoreEntity(book->entity_table, book, &book->guid, GNC_ID_BOOK);
book->kvp_data = kvp_frame_new (); book->kvp_data = kvp_frame_new ();
book->topgroup = xaccMallocAccountGroup(book);
book->pricedb = gnc_pricedb_create(book); /* XXX this needs to go away */
gnc_book_populate (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");
}
book->data_tables = g_hash_table_new (g_str_hash, g_str_equal); book->data_tables = g_hash_table_new (g_str_hash, g_str_equal);
@ -126,17 +156,8 @@ gnc_book_destroy (GNCBook *book)
gncObjectBookEnd (book); gncObjectBookEnd (book);
xaccAccountGroupBeginEdit (book->topgroup); /* XXX this needs to go away */
xaccAccountGroupDestroy (book->topgroup); gnc_book_depopulate (book);
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 */
xaccRemoveEntity (book->entity_table, &book->guid); xaccRemoveEntity (book->entity_table, &book->guid);
xaccEntityTableDestroy (book->entity_table); xaccEntityTableDestroy (book->entity_table);
@ -175,17 +196,26 @@ gnc_book_get_entity_table (GNCBook *book)
return book->entity_table; return book->entity_table;
} }
/* xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx */
#define GNC_COMMODITY_TABLE "gnc_commodity_table"
gnc_commodity_table * gnc_commodity_table *
gnc_book_get_commodity_table(GNCBook *book) gnc_book_get_commodity_table(GNCBook *book)
{ {
if (!book) return NULL; if (!book) return NULL;
printf ("duude get commoity table\n");
return book->commodity_table; return book->commodity_table;
return gnc_book_get_data (book, GNC_COMMODITY_TABLE);
} }
#define GNC_TOP_GROUP "gnc_top_group"
AccountGroup * AccountGroup *
gnc_book_get_group (GNCBook *book) gnc_book_get_group (GNCBook *book)
{ {
if (!book) return NULL; 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; return book->topgroup;
} }
@ -193,14 +223,15 @@ GNCPriceDB *
gnc_book_get_pricedb(GNCBook *book) gnc_book_get_pricedb(GNCBook *book)
{ {
if (!book) return NULL; if (!book) return NULL;
printf ("duude get pricedb\n");
return book->pricedb; return book->pricedb;
} }
GList * GList *
gnc_book_get_schedxactions( GNCBook *book ) gnc_book_get_schedxactions( GNCBook *book )
{ {
if ( book == NULL ) return NULL; if ( book == NULL ) return NULL;
return book->sched_xactions; return book->sched_xactions;
} }
AccountGroup * AccountGroup *
@ -237,14 +268,15 @@ gnc_book_set_group (GNCBook *book, AccountGroup *grp)
{ {
if (!book) return; if (!book) return;
/* Do not free the old topgroup here unless you also fix /* XXX Do not free the old topgroup here unless you also fix
* all the other uses of gnc_book_set_group! * 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) if (gnc_book_get_group (book) == grp) return;
return;
if (grp->book != book) if (grp && grp->book != book)
{ {
PERR ("cannot mix and match books freely!"); PERR ("cannot mix and match books freely!");
return; return;
@ -260,6 +292,7 @@ gnc_book_set_group (GNCBook *book, AccountGroup *grp)
*/ */
book->topgroup = grp; book->topgroup = grp;
gnc_book_set_data (book, GNC_TOP_GROUP, grp);
} }
void void
@ -432,13 +465,18 @@ gnc_book_equal (GNCBook *book_1, GNCBook *book_2)
/* ====================================================================== */ /* ====================================================================== */
/* Store arbitrary pointers in the GNCBook for data storage extensibility */ /* 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); 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; if (!book || !key) return NULL;
return g_hash_table_lookup (book->data_tables, (gpointer)key); return g_hash_table_lookup (book->data_tables, (gpointer)key);