r17364 - gnucash/branches/gobject-engine-dev2/src/engine - Convert gnc_commodity to be a GObject with properties and private area.
Phil Longstaff
plongstaff at cvs.gnucash.org
Sun Jul 20 21:21:18 EDT 2008
Author: plongstaff
Date: 2008-07-20 21:21:18 -0400 (Sun, 20 Jul 2008)
New Revision: 17364
Trac: http://svn.gnucash.org/trac/changeset/17364
Modified:
gnucash/branches/gobject-engine-dev2/src/engine/gnc-commodity.c
Log:
Convert gnc_commodity to be a GObject with properties and private area.
Modified: gnucash/branches/gobject-engine-dev2/src/engine/gnc-commodity.c
===================================================================
--- gnucash/branches/gobject-engine-dev2/src/engine/gnc-commodity.c 2008-07-20 23:53:16 UTC (rev 17363)
+++ gnucash/branches/gobject-engine-dev2/src/engine/gnc-commodity.c 2008-07-21 01:21:18 UTC (rev 17364)
@@ -44,10 +44,27 @@
* of the smallest-transactional-units of the currency are there
* in a 'unitname' unit. */
+enum {
+ PROP_0,
+ PROP_NAMESPACE,
+ PROP_FULL_NAME,
+ PROP_MNEMONIC,
+ PROP_PRINTNAME,
+ PROP_CUSIP,
+ PROP_FRACTION,
+ PROP_UNIQUE_NAME,
+ PROP_QUOTE_FLAG,
+ PROP_QUOTE_SOURCE,
+ PROP_QUOTE_TZ,
+};
+
struct gnc_commodity_s
{
QofInstance inst;
+};
+typedef struct CommodityPrivate
+{
gnc_commodity_namespace *namespace;
char * fullname;
@@ -65,13 +82,18 @@
/* the number of accounts using this commodity - this field is not
* persisted */
int usage_count;
-};
+} CommodityPrivate;
+#define GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE((o), GNC_TYPE_COMMODITY, CommodityPrivate))
+
struct _GncCommodityClass
{
QofInstanceClass parent_class;
};
+static void commodity_free(gnc_commodity * cm);
+
struct gnc_commodity_namespace_s
{
QofInstance inst;
@@ -498,11 +520,17 @@
static void noop (QofInstance *inst) {}
+static void
+comm_free(QofInstance* inst)
+{
+ commodity_free( GNC_COMMODITY(inst) );
+}
+
void
gnc_commodity_commit_edit (gnc_commodity *cm)
{
if (!qof_commit_edit (QOF_INSTANCE(cm))) return;
- qof_commit_edit_part2 (&cm->inst, commit_err, noop, noop);
+ qof_commit_edit_part2 (&cm->inst, commit_err, noop, comm_free);
}
/********************************************************************
@@ -517,44 +545,247 @@
}
static void
-reset_printname(gnc_commodity *com)
+reset_printname(CommodityPrivate *priv)
{
- g_free(com->printname);
- com->printname = g_strdup_printf("%s (%s)",
- com->mnemonic ? com->mnemonic : "",
- com->fullname ? com->fullname : "");
+ g_free(priv->printname);
+ priv->printname = g_strdup_printf("%s (%s)",
+ priv->mnemonic ? priv->mnemonic : "",
+ priv->fullname ? priv->fullname : "");
}
static void
-reset_unique_name(gnc_commodity *com)
+reset_unique_name(CommodityPrivate *priv)
{
gnc_commodity_namespace *ns;
- g_free(com->unique_name);
- ns = com->namespace;
- com->unique_name = g_strdup_printf("%s::%s",
+ g_free(priv->unique_name);
+ ns = priv->namespace;
+ priv->unique_name = g_strdup_printf("%s::%s",
ns ? ns->name : "",
- com->mnemonic ? com->mnemonic : "");
+ priv->mnemonic ? priv->mnemonic : "");
}
/* GObject Initialization */
-QOF_GOBJECT_IMPL(gnc_commodity, gnc_commodity, QOF_TYPE_INSTANCE);
+G_DEFINE_TYPE(gnc_commodity, gnc_commodity, QOF_TYPE_INSTANCE);
static void
gnc_commodity_init(gnc_commodity* com)
{
+ CommodityPrivate* priv;
+
+ priv = GET_PRIVATE(com);
+
+ priv->namespace = NULL;
+ priv->fullname = CACHE_INSERT("");
+ priv->mnemonic = CACHE_INSERT("");
+ priv->cusip = CACHE_INSERT("");
+ priv->fraction = 10000;
+ priv->mark = 0;
+ priv->quote_flag = 0;
+ priv->quote_source = NULL;
+ priv->quote_tz = CACHE_INSERT("");
+
+ reset_printname(priv);
+ reset_unique_name(priv);
}
static void
-gnc_commodity_dispose_real (GObject *nsp)
+gnc_commodity_dispose(GObject *comp)
{
+ G_OBJECT_CLASS(gnc_commodity_parent_class)->dispose(comp);
}
static void
-gnc_commodity_finalize_real(GObject* comp)
+gnc_commodity_finalize(GObject* comp)
{
+ G_OBJECT_CLASS(gnc_commodity_parent_class)->finalize(comp);
}
+static void
+gnc_commodity_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ gnc_commodity *commodity;
+ CommodityPrivate* priv;
+
+ g_return_if_fail(GNC_IS_COMMODITY(object));
+
+ commodity = GNC_COMMODITY(object);
+ priv = GET_PRIVATE(commodity);
+ switch (prop_id) {
+ case PROP_NAMESPACE:
+ g_value_set_object(value, priv->namespace);
+ break;
+ case PROP_FULL_NAME:
+ g_value_set_string(value, priv->fullname);
+ break;
+ case PROP_MNEMONIC:
+ g_value_set_string(value, priv->mnemonic);
+ break;
+ case PROP_PRINTNAME:
+ g_value_set_string(value, priv->printname);
+ break;
+ case PROP_CUSIP:
+ g_value_set_string(value, priv->cusip);
+ break;
+ case PROP_FRACTION:
+ g_value_set_int(value, priv->fraction);
+ break;
+ case PROP_UNIQUE_NAME:
+ g_value_set_string(value, priv->unique_name);
+ break;
+ case PROP_QUOTE_FLAG:
+ g_value_set_boolean(value, priv->quote_flag);
+ break;
+ case PROP_QUOTE_SOURCE:
+ g_value_set_pointer(value, priv->quote_source);
+ break;
+ case PROP_QUOTE_TZ:
+ g_value_set_string(value, priv->quote_tz);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gnc_commodity_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ gnc_commodity *commodity;
+ gnc_numeric *number;
+
+ g_return_if_fail(GNC_IS_COMMODITY(object));
+
+ commodity = GNC_COMMODITY(object);
+
+ switch (prop_id) {
+ case PROP_NAMESPACE:
+ gnc_commodity_set_namespace(commodity, g_value_get_object(value));
+ break;
+ case PROP_FULL_NAME:
+ gnc_commodity_set_fullname(commodity, g_value_get_string(value));
+ break;
+ case PROP_MNEMONIC:
+ gnc_commodity_set_mnemonic(commodity, g_value_get_string(value));
+ break;
+ case PROP_CUSIP:
+ gnc_commodity_set_cusip(commodity, g_value_get_string(value));
+ break;
+ case PROP_FRACTION:
+ gnc_commodity_set_fraction(commodity, g_value_get_int(value));
+ break;
+ case PROP_QUOTE_FLAG:
+ gnc_commodity_set_quote_flag(commodity, g_value_get_boolean(value));
+ break;
+ case PROP_QUOTE_SOURCE:
+ gnc_commodity_set_quote_source(commodity, g_value_get_pointer(value));
+ break;
+ case PROP_QUOTE_TZ:
+ gnc_commodity_set_quote_tz(commodity, g_value_get_string(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+static void
+gnc_commodity_class_init(struct _GncCommodityClass* klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->dispose = gnc_commodity_dispose;
+ gobject_class->finalize = gnc_commodity_finalize;
+ gobject_class->set_property = gnc_commodity_set_property;
+ gobject_class->get_property = gnc_commodity_get_property;
+
+ g_type_class_add_private(klass, sizeof(CommodityPrivate));
+
+ g_object_class_install_property(gobject_class,
+ PROP_NAMESPACE,
+ g_param_spec_object ("namespace",
+ "Namespace",
+ "The namespace field denotes the "
+ "namespace for this commodity, either "
+ "a currency or symbol from a quote source.",
+ GNC_TYPE_COMMODITY_NAMESPACE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_FULL_NAME,
+ g_param_spec_string ("fullname",
+ "Full Commodity Name",
+ "The fullname is the official full name of"
+ "the currency.",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_MNEMONIC,
+ g_param_spec_string ("mnemonic",
+ "Commodity Mnemonic",
+ "The mnemonic is the official abbreviated"
+ "designation for the currency.",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_PRINTNAME,
+ g_param_spec_string ("printname",
+ "Commodity Print Name",
+ "Printable form of the commodity name.",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property(gobject_class,
+ PROP_CUSIP,
+ g_param_spec_string ("cusip",
+ "Commodity CUSIP Code",
+ "?????",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_FRACTION,
+ g_param_spec_int ("fraction",
+ "Fraction",
+ "The fraction is the number of sub-units that "
+ "the basic commodity can be divided into.",
+ 1,
+ 100,
+ 1,
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_UNIQUE_NAME,
+ g_param_spec_string ("unique-name",
+ "Commodity Unique Name",
+ "Unique form of the commodity name which combines "
+ "the namespace name and the commodity name.",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property(gobject_class,
+ PROP_QUOTE_FLAG,
+ g_param_spec_boolean ("quote_flag",
+ "Quote Flag",
+ "TRUE if prices are to be downloaded for this "
+ "commodity from a quote source.",
+ FALSE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_QUOTE_SOURCE,
+ g_param_spec_pointer("quote-source",
+ "Quote Source",
+ "The quote source from which prices are downloaded.",
+ G_PARAM_READWRITE));
+ g_object_class_install_property(gobject_class,
+ PROP_QUOTE_TZ,
+ g_param_spec_string ("quote-tz",
+ "Commodity Quote Timezone",
+ "?????",
+ NULL,
+ G_PARAM_READWRITE));
+}
+
gnc_commodity *
gnc_commodity_new(QofBook *book, const char * fullname,
const char * namespace, const char * mnemonic,
@@ -564,28 +795,19 @@
gnc_commodity_table *table;
qof_instance_init_data (&retval->inst, GNC_ID_COMMODITY, book);
- table = gnc_commodity_table_get_table(book);
- if (namespace) {
- retval->namespace = gnc_commodity_table_find_namespace(table, namespace);
- if (!retval->namespace)
- retval->namespace = gnc_commodity_table_add_namespace(table, namespace, book);
- } else {
- retval->namespace = NULL;
+ gnc_commodity_begin_edit(retval);
+
+ gnc_commodity_set_namespace(retval, namespace);
+ if (gnc_commodity_namespace_is_iso(namespace)) {
+ gnc_commodity_set_quote_source(retval,
+ gnc_quote_source_lookup_by_internal("currency") );
}
-
- retval->fullname = CACHE_INSERT(fullname);
- retval->mnemonic = CACHE_INSERT(mnemonic);
- retval->cusip = CACHE_INSERT(cusip);
- retval->fraction = fraction;
- retval->mark = 0;
- retval->quote_flag = 0;
- retval->quote_source = NULL;
- retval->quote_tz = CACHE_INSERT("");
+ gnc_commodity_set_fullname(retval, fullname);
+ gnc_commodity_set_mnemonic(retval, mnemonic);
+ gnc_commodity_set_cusip(retval, cusip);
+ gnc_commodity_set_fraction(retval, fraction);
+ gnc_commodity_commit_edit(retval);
- reset_printname(retval);
- reset_unique_name(retval);
- if (gnc_commodity_namespace_is_iso(namespace))
- retval->quote_source = gnc_quote_source_lookup_by_internal("currency");
qof_event_gen (&retval->inst, QOF_EVENT_CREATE, NULL);
return retval;
@@ -596,46 +818,49 @@
* gnc_commodity_destroy
********************************************************************/
-void
-gnc_commodity_destroy(gnc_commodity * cm)
+static void
+commodity_free(gnc_commodity * cm)
{
QofBook *book;
gnc_commodity_table *table;
+ CommodityPrivate* priv;
+
if(!cm) return;
book = qof_instance_get_book(&cm->inst);
table = gnc_commodity_table_get_table(book);
gnc_commodity_table_remove(table, cm);
+ priv = GET_PRIVATE(cm);
qof_event_gen (&cm->inst, QOF_EVENT_DESTROY, NULL);
/* Set at creation */
- CACHE_REMOVE (cm->fullname);
- CACHE_REMOVE (cm->cusip);
- CACHE_REMOVE (cm->mnemonic);
- CACHE_REMOVE (cm->quote_tz);
- cm->namespace = NULL;
+ CACHE_REMOVE (priv->fullname);
+ CACHE_REMOVE (priv->cusip);
+ CACHE_REMOVE (priv->mnemonic);
+ CACHE_REMOVE (priv->quote_tz);
+ priv->namespace = NULL;
/* Set through accessor functions */
- cm->quote_source = NULL;
+ priv->quote_source = NULL;
/* Automatically generated */
- g_free(cm->printname);
- cm->printname = NULL;
+ g_free(priv->printname);
+ priv->printname = NULL;
- g_free(cm->unique_name);
- cm->unique_name = NULL;
+ g_free(priv->unique_name);
+ priv->unique_name = NULL;
- cm->mark = 0;
+ priv->mark = 0;
#ifdef ACCOUNTS_CLEANED_UP
/* Account objects are not actually cleaned up when a book is closed (in fact
* a memory leak), but commodities are, so in currently this warning gets hit
* quite frequently. Disable the check until cleaning up of accounts objects
* on close is implemented. */
- if(cm->usage_count != 0) {
+ if(priv->usage_count != 0) {
PWARN("Destroying commodity (%p) with non-zero usage_count (%d).", cm,
- cm->usage_count);
+ priv->usage_count);
}
#endif
@@ -644,15 +869,26 @@
}
void
+gnc_commodity_destroy(gnc_commodity * cm)
+{
+ gnc_commodity_begin_edit(cm);
+ qof_instance_set_destroying(cm, TRUE);
+ gnc_commodity_commit_edit(cm);
+}
+
+void
gnc_commodity_copy(gnc_commodity * dest, gnc_commodity *src)
{
- gnc_commodity_set_fullname (dest, src->fullname);
- dest->namespace = src->namespace;
- gnc_commodity_set_fraction (dest, src->fraction);
- gnc_commodity_set_cusip (dest, src->cusip);
- gnc_commodity_set_quote_flag (dest, src->quote_flag);
+ CommodityPrivate* src_priv = GET_PRIVATE(src);
+ CommodityPrivate* dest_priv = GET_PRIVATE(dest);
+
+ gnc_commodity_set_fullname (dest, src_priv->fullname);
+ dest_priv->namespace = src_priv->namespace;
+ gnc_commodity_set_fraction (dest, src_priv->fraction);
+ gnc_commodity_set_cusip (dest, src_priv->cusip);
+ gnc_commodity_set_quote_flag (dest, src_priv->quote_flag);
gnc_commodity_set_quote_source (dest, gnc_commodity_get_quote_source (src));
- gnc_commodity_set_quote_tz (dest, src->quote_tz);
+ gnc_commodity_set_quote_tz (dest, src_priv->quote_tz);
kvp_frame_delete (dest->inst.kvp_data);
dest->inst.kvp_data = kvp_frame_copy (src->inst.kvp_data);
}
@@ -660,27 +896,32 @@
gnc_commodity *
gnc_commodity_clone(gnc_commodity *src, QofBook *dest_book)
{
+ CommodityPrivate* src_priv;
+ CommodityPrivate* dest_priv;
+
gnc_commodity * dest = g_object_new(GNC_TYPE_COMMODITY, NULL);
qof_instance_init_data (&dest->inst, GNC_ID_COMMODITY, dest_book);
+ src_priv = GET_PRIVATE(src);
+ dest_priv = GET_PRIVATE(dest);
- dest->fullname = CACHE_INSERT(src->fullname);
- dest->mnemonic = CACHE_INSERT(src->mnemonic);
- dest->cusip = CACHE_INSERT(src->cusip);
- dest->quote_tz = CACHE_INSERT(src->quote_tz);
+ dest_priv->fullname = CACHE_INSERT(src_priv->fullname);
+ dest_priv->mnemonic = CACHE_INSERT(src_priv->mnemonic);
+ dest_priv->cusip = CACHE_INSERT(src_priv->cusip);
+ dest_priv->quote_tz = CACHE_INSERT(src_priv->quote_tz);
- dest->namespace = src->namespace;
+ dest_priv->namespace = src_priv->namespace;
- dest->mark = 0;
- dest->fraction = src->fraction;
- dest->quote_flag = src->quote_flag;
+ dest_priv->mark = 0;
+ dest_priv->fraction = src_priv->fraction;
+ dest_priv->quote_flag = src_priv->quote_flag;
gnc_commodity_set_quote_source (dest, gnc_commodity_get_quote_source (src));
kvp_frame_delete (dest->inst.kvp_data);
dest->inst.kvp_data = kvp_frame_copy (src->inst.kvp_data);
- reset_printname(dest);
- reset_unique_name(dest);
+ reset_printname(dest_priv);
+ reset_unique_name(dest_priv);
return dest;
}
@@ -693,7 +934,7 @@
gnc_commodity_get_mnemonic(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return cm->mnemonic;
+ return GET_PRIVATE(cm)->mnemonic;
}
/********************************************************************
@@ -704,7 +945,7 @@
gnc_commodity_get_printname(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return cm->printname;
+ return GET_PRIVATE(cm)->printname;
}
@@ -716,25 +957,29 @@
gnc_commodity_get_namespace(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return gnc_commodity_namespace_get_name(cm->namespace);
+ return gnc_commodity_namespace_get_name(GET_PRIVATE(cm)->namespace);
}
const char *
gnc_commodity_get_namespace_compat(const gnc_commodity * cm)
{
- if (!cm || !cm->namespace) return NULL;
- if (cm->namespace->iso4217) {
+ CommodityPrivate* priv;
+
+ if (!cm) return NULL;
+ priv = GET_PRIVATE(cm);
+ if(!priv->namespace) return NULL;
+ if (priv->namespace->iso4217) {
/* Data files are still written with ISO4217. */
return GNC_COMMODITY_NS_ISO;
}
- return gnc_commodity_namespace_get_name(cm->namespace);
+ return gnc_commodity_namespace_get_name(priv->namespace);
}
gnc_commodity_namespace *
gnc_commodity_get_namespace_ds(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return cm->namespace;
+ return GET_PRIVATE(cm)->namespace;
}
/********************************************************************
@@ -745,7 +990,7 @@
gnc_commodity_get_fullname(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return cm->fullname;
+ return GET_PRIVATE(cm)->fullname;
}
@@ -757,7 +1002,7 @@
gnc_commodity_get_unique_name(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return cm->unique_name;
+ return GET_PRIVATE(cm)->unique_name;
}
@@ -769,7 +1014,7 @@
gnc_commodity_get_cusip(const gnc_commodity * cm)
{
if(!cm) return NULL;
- return cm->cusip;
+ return GET_PRIVATE(cm)->cusip;
}
/********************************************************************
@@ -780,7 +1025,7 @@
gnc_commodity_get_fraction(const gnc_commodity * cm)
{
if(!cm) return 0;
- return cm->fraction;
+ return GET_PRIVATE(cm)->fraction;
}
/********************************************************************
@@ -791,7 +1036,7 @@
gnc_commodity_get_mark(const gnc_commodity * cm)
{
if(!cm) return 0;
- return cm->mark;
+ return GET_PRIVATE(cm)->mark;
}
/********************************************************************
@@ -817,7 +1062,7 @@
gnc_commodity_get_quote_flag(const gnc_commodity *cm)
{
if(!cm) return FALSE;
- return (cm->quote_flag);
+ return (GET_PRIVATE(cm)->quote_flag);
}
/********************************************************************
@@ -827,10 +1072,13 @@
gnc_quote_source*
gnc_commodity_get_quote_source(const gnc_commodity *cm)
{
+ CommodityPrivate* priv;
+
if(!cm) return NULL;
- if (!cm->quote_source && gnc_commodity_is_iso(cm))
+ priv = GET_PRIVATE(cm);
+ if (!priv->quote_source && gnc_commodity_is_iso(cm))
return ¤cy_quote_source;
- return cm->quote_source;
+ return priv->quote_source;
}
gnc_quote_source*
@@ -850,7 +1098,7 @@
gnc_commodity_get_quote_tz(const gnc_commodity *cm)
{
if(!cm) return NULL;
- return cm->quote_tz;
+ return GET_PRIVATE(cm)->quote_tz;
}
/********************************************************************
@@ -860,16 +1108,19 @@
void
gnc_commodity_set_mnemonic(gnc_commodity * cm, const char * mnemonic)
{
+ CommodityPrivate* priv;
+
if(!cm) return;
- if(cm->mnemonic == mnemonic) return;
+ priv = GET_PRIVATE(cm);
+ if(priv->mnemonic == mnemonic) return;
gnc_commodity_begin_edit(cm);
- CACHE_REMOVE (cm->mnemonic);
- cm->mnemonic = CACHE_INSERT(mnemonic);
+ CACHE_REMOVE (priv->mnemonic);
+ priv->mnemonic = CACHE_INSERT(mnemonic);
mark_commodity_dirty (cm);
- reset_printname(cm);
- reset_unique_name(cm);
+ reset_printname(priv);
+ reset_unique_name(priv);
gnc_commodity_commit_edit(cm);
}
@@ -883,21 +1134,23 @@
QofBook *book;
gnc_commodity_table *table;
gnc_commodity_namespace *nsp;
+ CommodityPrivate* priv;
if(!cm) return;
+ priv = GET_PRIVATE(cm);
book = qof_instance_get_book (&cm->inst);
table = gnc_commodity_table_get_table(book);
nsp = gnc_commodity_table_add_namespace(table, namespace, book);
- if (cm->namespace == nsp)
+ if (priv->namespace == nsp)
return;
gnc_commodity_begin_edit(cm);
- cm->namespace = nsp;
+ priv->namespace = nsp;
if (nsp->iso4217)
- cm->quote_source = gnc_quote_source_lookup_by_internal("currency");
+ priv->quote_source = gnc_quote_source_lookup_by_internal("currency");
mark_commodity_dirty(cm);
- reset_printname(cm);
- reset_unique_name(cm);
+ reset_printname(priv);
+ reset_unique_name(priv);
gnc_commodity_commit_edit(cm);
}
@@ -908,15 +1161,18 @@
void
gnc_commodity_set_fullname(gnc_commodity * cm, const char * fullname)
{
+ CommodityPrivate* priv;
+
if(!cm) return;
- if(cm->fullname == fullname) return;
+ priv = GET_PRIVATE(cm);
+ if(priv->fullname == fullname) return;
- CACHE_REMOVE (cm->fullname);
- cm->fullname = CACHE_INSERT (fullname);
+ CACHE_REMOVE (priv->fullname);
+ priv->fullname = CACHE_INSERT (fullname);
gnc_commodity_begin_edit(cm);
mark_commodity_dirty(cm);
- reset_printname(cm);
+ reset_printname(priv);
gnc_commodity_commit_edit(cm);
}
@@ -928,12 +1184,16 @@
gnc_commodity_set_cusip(gnc_commodity * cm,
const char * cusip)
{
+ CommodityPrivate* priv;
+
if(!cm) return;
- if(cm->cusip == cusip) return;
+ priv = GET_PRIVATE(cm);
+ if(priv->cusip == cusip) return;
+
gnc_commodity_begin_edit(cm);
- CACHE_REMOVE (cm->cusip);
- cm->cusip = CACHE_INSERT (cusip);
+ CACHE_REMOVE (priv->cusip);
+ priv->cusip = CACHE_INSERT (cusip);
mark_commodity_dirty(cm);
gnc_commodity_commit_edit(cm);
}
@@ -947,7 +1207,7 @@
{
if(!cm) return;
gnc_commodity_begin_edit(cm);
- cm->fraction = fraction;
+ GET_PRIVATE(cm)->fraction = fraction;
mark_commodity_dirty(cm);
gnc_commodity_commit_edit(cm);
}
@@ -960,7 +1220,7 @@
gnc_commodity_set_mark(gnc_commodity * cm, gint16 mark)
{
if(!cm) return;
- cm->mark = mark;
+ GET_PRIVATE(cm)->mark = mark;
}
/********************************************************************
@@ -993,6 +1253,8 @@
void
gnc_commodity_user_set_quote_flag(gnc_commodity *cm, const gboolean flag)
{
+ CommodityPrivate* priv;
+
ENTER ("(cm=%p, flag=%d)", cm, flag);
if(!cm) {
@@ -1000,6 +1262,7 @@
return;
}
+ priv = GET_PRIVATE(cm);
gnc_commodity_begin_edit(cm);
gnc_commodity_set_quote_flag(cm, flag);
if(gnc_commodity_is_iso(cm)) {
@@ -1011,7 +1274,7 @@
* accounts using this currency OR flag is TRUE and there are accounts
* using this currency; otherwise disable auto quote control */
gnc_commodity_set_auto_quote_control_flag(cm,
- (!flag && (cm->usage_count == 0)) || (flag && (cm->usage_count != 0)));
+ (!flag && (priv->usage_count == 0)) || (flag && (priv->usage_count != 0)));
}
gnc_commodity_commit_edit(cm);
LEAVE("");
@@ -1028,7 +1291,7 @@
if(!cm) return;
gnc_commodity_begin_edit(cm);
- cm->quote_flag = flag;
+ GET_PRIVATE(cm)->quote_flag = flag;
mark_commodity_dirty(cm);
gnc_commodity_commit_edit(cm);
LEAVE(" ");
@@ -1045,7 +1308,7 @@
if(!cm) return;
gnc_commodity_begin_edit(cm);
- cm->quote_source = src;
+ GET_PRIVATE(cm)->quote_source = src;
mark_commodity_dirty(cm);
gnc_commodity_commit_edit(cm);
LEAVE(" ");
@@ -1058,13 +1321,19 @@
void
gnc_commodity_set_quote_tz(gnc_commodity *cm, const char *tz)
{
+ CommodityPrivate* priv;
+
ENTER ("(cm=%p, tz=%s)", cm, tz ? tz : "(null)");
- if(!cm || tz == cm->quote_tz) return;
+ if(!cm) return;
+
+ priv = GET_PRIVATE(cm);
+ if(tz == priv->quote_tz) return;
+
gnc_commodity_begin_edit(cm);
- CACHE_REMOVE (cm->quote_tz);
- cm->quote_tz = CACHE_INSERT (tz);
+ CACHE_REMOVE (priv->quote_tz);
+ priv->quote_tz = CACHE_INSERT (tz);
mark_commodity_dirty(cm);
gnc_commodity_commit_edit(cm);
LEAVE(" ");
@@ -1078,6 +1347,7 @@
gnc_commodity_increment_usage_count(gnc_commodity *cm)
{
const char *str;
+ CommodityPrivate* priv;
ENTER("(cm=%p)", cm);
@@ -1086,7 +1356,9 @@
return;
}
- if((cm->usage_count == 0) && !cm->quote_flag
+ priv = GET_PRIVATE(cm);
+
+ if((priv->usage_count == 0) && !priv->quote_flag
&& gnc_commodity_get_auto_quote_control_flag(cm)
&& gnc_commodity_is_iso(cm)) {
/* compatability hack - Gnucash 1.8 gets currency quotes when a
@@ -1097,8 +1369,8 @@
gnc_commodity_get_default_quote_source(cm));
gnc_commodity_commit_edit(cm);
}
- cm->usage_count++;
- LEAVE("(usage_count=%d)", cm->usage_count);
+ priv->usage_count++;
+ LEAVE("(usage_count=%d)", priv->usage_count);
}
/********************************************************************
@@ -1109,6 +1381,7 @@
gnc_commodity_decrement_usage_count(gnc_commodity *cm)
{
const char *str;
+ CommodityPrivate* priv;
ENTER("(cm=%p)", cm);
@@ -1117,21 +1390,23 @@
return;
}
- if(cm->usage_count == 0) {
+ priv = GET_PRIVATE(cm);
+
+ if(priv->usage_count == 0) {
PWARN("usage_count already zero");
LEAVE("");
return;
}
- cm->usage_count--;
- if((cm->usage_count == 0) && cm->quote_flag
+ priv->usage_count--;
+ if((priv->usage_count == 0) && priv->quote_flag
&& gnc_commodity_get_auto_quote_control_flag(cm)
&& gnc_commodity_is_iso(cm)) {
/* if this is a currency with auto quote control enabled and no more
* accounts reference this currency, disable quote retrieval */
gnc_commodity_set_quote_flag(cm, FALSE);
}
- LEAVE("(usage_count=%d)", cm->usage_count);
+ LEAVE("(usage_count=%d)", priv->usage_count);
}
/********************************************************************\
@@ -1146,16 +1421,25 @@
gboolean
gnc_commodity_equiv(const gnc_commodity * a, const gnc_commodity * b)
{
+ CommodityPrivate* priv_a;
+ CommodityPrivate* priv_b;
+
if(a == b) return TRUE;
if(!a || !b) return FALSE;
- if(a->namespace != b->namespace) return FALSE;
- if(safe_strcmp(a->mnemonic, b->mnemonic) != 0) return FALSE;
+
+ priv_a = GET_PRIVATE(a);
+ priv_b = GET_PRIVATE(b);
+ if(priv_a->namespace != priv_b->namespace) return FALSE;
+ if(safe_strcmp(priv_a->mnemonic, priv_b->mnemonic) != 0) return FALSE;
return TRUE;
}
gboolean
gnc_commodity_equal(const gnc_commodity * a, const gnc_commodity * b)
{
+ CommodityPrivate* priv_a;
+ CommodityPrivate* priv_b;
+
if (a == b) return TRUE;
if (!a || !b)
@@ -1164,35 +1448,38 @@
return FALSE;
}
- if (a->namespace != b->namespace)
+ priv_a = GET_PRIVATE(a);
+ priv_b = GET_PRIVATE(b);
+
+ if (priv_a->namespace != priv_b->namespace)
{
DEBUG ("namespaces differ: %p(%s) vs %p(%s)",
- a->namespace, gnc_commodity_namespace_get_name(a->namespace),
- b->namespace, gnc_commodity_namespace_get_name(b->namespace));
+ priv_a->namespace, gnc_commodity_namespace_get_name(priv_a->namespace),
+ priv_b->namespace, gnc_commodity_namespace_get_name(priv_b->namespace));
return FALSE;
}
- if (safe_strcmp(a->mnemonic, b->mnemonic) != 0)
+ if (safe_strcmp(priv_a->mnemonic, priv_b->mnemonic) != 0)
{
- DEBUG ("mnemonics differ: %s vs %s", a->mnemonic, b->mnemonic);
+ DEBUG ("mnemonics differ: %s vs %s", priv_a->mnemonic, priv_b->mnemonic);
return FALSE;
}
- if (safe_strcmp(a->fullname, b->fullname) != 0)
+ if (safe_strcmp(priv_a->fullname, priv_b->fullname) != 0)
{
- DEBUG ("fullnames differ: %s vs %s", a->fullname, b->fullname);
+ DEBUG ("fullnames differ: %s vs %s", priv_a->fullname, priv_b->fullname);
return FALSE;
}
- if (safe_strcmp(a->cusip, b->cusip) != 0)
+ if (safe_strcmp(priv_a->cusip, priv_b->cusip) != 0)
{
- DEBUG ("cusips differ: %s vs %s", a->cusip, b->cusip);
+ DEBUG ("cusips differ: %s vs %s", priv_a->cusip, priv_b->cusip);
return FALSE;
}
- if (a->fraction != b->fraction)
+ if (priv_a->fraction != priv_b->fraction)
{
- DEBUG ("fractions differ: %d vs %d", a->fraction, b->fraction);
+ DEBUG ("fractions differ: %d vs %d", priv_a->fraction, priv_b->fraction);
return FALSE;
}
@@ -1435,16 +1722,19 @@
gnc_commodity_namespace * nsp = NULL;
gnc_commodity *c;
const char *ns_name;
+ CommodityPrivate* priv;
QofBook *book;
if (!table) return NULL;
if (!comm) return NULL;
+ priv = GET_PRIVATE(comm);
+
ENTER ("(table=%p, comm=%p) %s %s", table, comm,
- (comm->mnemonic == NULL ? "(null)" : comm->mnemonic),
- (comm->fullname == NULL ? "(null)" : comm->fullname));
- ns_name = gnc_commodity_namespace_get_name(comm->namespace);
- c = gnc_commodity_table_lookup (table, ns_name, comm->mnemonic);
+ (priv->mnemonic == NULL ? "(null)" : priv->mnemonic),
+ (priv->fullname == NULL ? "(null)" : priv->fullname));
+ ns_name = gnc_commodity_namespace_get_name(priv->namespace);
+ c = gnc_commodity_table_lookup (table, ns_name, priv->mnemonic);
if (c)
{
@@ -1462,10 +1752,10 @@
book = qof_instance_get_book (&comm->inst);
nsp = gnc_commodity_table_add_namespace(table, ns_name, book);
- PINFO ("insert %p %s into nsp=%p %s", comm->mnemonic, comm->mnemonic,
+ PINFO ("insert %p %s into nsp=%p %s", priv->mnemonic, priv->mnemonic,
nsp->cm_table, nsp->name);
g_hash_table_insert(nsp->cm_table,
- CACHE_INSERT(comm->mnemonic),
+ CACHE_INSERT(priv->mnemonic),
(gpointer)comm);
nsp->cm_list = g_list_append(nsp->cm_list, comm);
@@ -1485,13 +1775,15 @@
{
gnc_commodity_namespace * nsp;
gnc_commodity *c;
+ CommodityPrivate* priv;
const char *ns_name;
if (!table) return;
if (!comm) return;
- ns_name = gnc_commodity_namespace_get_name(comm->namespace);
- c = gnc_commodity_table_lookup (table, ns_name, comm->mnemonic);
+ priv = GET_PRIVATE(comm);
+ ns_name = gnc_commodity_namespace_get_name(priv->namespace);
+ c = gnc_commodity_table_lookup (table, ns_name, priv->mnemonic);
if (c != comm) return;
qof_event_gen (&comm->inst, QOF_EVENT_REMOVE, NULL);
@@ -1500,7 +1792,7 @@
if (!nsp) return;
nsp->cm_list = g_list_remove(nsp->cm_list, comm);
- g_hash_table_remove (nsp->cm_table, comm->mnemonic);
+ g_hash_table_remove (nsp->cm_table, priv->mnemonic);
/* XXX minor mem leak, should remove the key as well */
}
@@ -1582,8 +1874,13 @@
gboolean
gnc_commodity_is_iso(const gnc_commodity * cm)
{
- if (!cm || !cm->namespace) return FALSE;
- return cm->namespace->iso4217;
+ CommodityPrivate* priv;
+
+ if (!cm) return FALSE;
+
+ priv = GET_PRIVATE(cm);
+ if( !priv->namespace) return FALSE;
+ return priv->namespace->iso4217;
}
gboolean
@@ -1592,7 +1889,7 @@
const char *ns_name;
if (!cm) return FALSE;
- ns_name = gnc_commodity_namespace_get_name(cm->namespace);
+ ns_name = gnc_commodity_namespace_get_name(GET_PRIVATE(cm)->namespace);
return (!safe_strcmp(ns_name, GNC_COMMODITY_NS_LEGACY) ||
!safe_strcmp(ns_name, GNC_COMMODITY_NS_CURRENCY));
}
@@ -1627,10 +1924,11 @@
get_quotables_helper1(gpointer key, gpointer value, gpointer data)
{
gnc_commodity *comm = value;
+ CommodityPrivate* priv = GET_PRIVATE(comm);
GList ** l = data;
- if (!comm->quote_flag ||
- !comm->quote_source || !comm->quote_source->supported)
+ if (!priv->quote_flag ||
+ !priv->quote_source || !priv->quote_source->supported)
return;
*l = g_list_prepend(*l, value);
}
@@ -1639,9 +1937,10 @@
get_quotables_helper2 (gnc_commodity *comm, gpointer data)
{
GList ** l = data;
+ CommodityPrivate* priv = GET_PRIVATE(comm);
- if (!comm->quote_flag ||
- !comm->quote_source || !comm->quote_source->supported)
+ if (!priv->quote_flag ||
+ !priv->quote_source || !priv->quote_source->supported)
return TRUE;
*l = g_list_prepend(*l, comm);
return TRUE;
More information about the gnucash-changes
mailing list