[Gnucash-changes] r13731 - gnucash/trunk - Use the name "Currency"
internally instead of ISO4217. Make it
David Hampton
hampton at cvs.gnucash.org
Mon Apr 3 17:39:27 EDT 2006
Author: hampton
Date: 2006-04-03 17:39:25 -0400 (Mon, 03 Apr 2006)
New Revision: 13731
Trac: http://svn.gnucash.org/trac/changeset/13731
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/backend/file/gnc-commodity-xml-v2.c
gnucash/trunk/src/backend/file/io-gncxml-v2.c
gnucash/trunk/src/backend/file/sixtp-dom-generators.c
gnucash/trunk/src/engine/gnc-commodity.c
gnucash/trunk/src/engine/gnc-commodity.h
gnucash/trunk/src/gnome-utils/dialog-commodity.c
gnucash/trunk/src/gnome/dialog-commodities.c
Log:
Use the name "Currency" internally instead of ISO4217. Make it
possible to edit the "get quotes" flag on currencies.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/ChangeLog 2006-04-03 21:39:25 UTC (rev 13731)
@@ -1,3 +1,13 @@
+2006-04-03 David Hampton <hampton at employees.org>
+
+ * src/backend/file/sixtp-dom-generators.c:
+ * src/backend/file/gnc-commodity-xml-v2.c:
+ * src/gnome-utils/dialog-commodity.c:
+ * src/gnome/dialog-commodities.c:
+ * src/engine/gnc-commodity.[ch]: Use the name "Currency"
+ internally instead of ISO4217. Make it possible to edit the "get
+ quotes" flag on currencies.
+
2006-04-02 David Hampton <hampton at employees.org>
* src/register/ledger-core/split-register-model.c: Change the
Modified: gnucash/trunk/src/backend/file/gnc-commodity-xml-v2.c
===================================================================
--- gnucash/trunk/src/backend/file/gnc-commodity-xml-v2.c 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/backend/file/gnc-commodity-xml-v2.c 2006-04-03 21:39:25 UTC (rev 13731)
@@ -65,33 +65,39 @@
gnc_quote_source *source;
const char *string;
xmlNodePtr ret;
+ gboolean currency = gnc_commodity_is_iso(com);
+ if (currency && !gnc_commodity_get_quote_flag(com))
+ return NULL;
+
ret = xmlNewNode(NULL, BAD_CAST gnc_commodity_string);
xmlSetProp(ret, BAD_CAST "version", BAD_CAST commodity_version_string);
xmlAddChild(ret, text_to_dom_tree(cmdty_namespace,
- gnc_commodity_get_namespace(com)));
+ gnc_commodity_get_namespace_compat(com)));
xmlAddChild(ret, text_to_dom_tree(cmdty_id,
gnc_commodity_get_mnemonic(com)));
- if(gnc_commodity_get_fullname(com))
- {
- xmlAddChild(ret, text_to_dom_tree(cmdty_name,
- gnc_commodity_get_fullname(com)));
+ if (!currency) {
+ if(gnc_commodity_get_fullname(com))
+ {
+ xmlAddChild(ret, text_to_dom_tree(cmdty_name,
+ gnc_commodity_get_fullname(com)));
+ }
+
+ if(gnc_commodity_get_cusip(com) &&
+ strlen(gnc_commodity_get_cusip(com)) > 0)
+ {
+ xmlAddChild(ret, text_to_dom_tree(
+ cmdty_xcode,
+ gnc_commodity_get_cusip(com)));
+ }
+
+ xmlAddChild(ret, int_to_dom_tree(cmdty_fraction,
+ gnc_commodity_get_fraction(com)));
}
- if(gnc_commodity_get_cusip(com) &&
- strlen(gnc_commodity_get_cusip(com)) > 0)
- {
- xmlAddChild(ret, text_to_dom_tree(
- cmdty_xcode,
- gnc_commodity_get_cusip(com)));
- }
-
- xmlAddChild(ret, int_to_dom_tree(cmdty_fraction,
- gnc_commodity_get_fraction(com)));
-
if (gnc_commodity_get_quote_flag(com)) {
xmlNewChild(ret, NULL, BAD_CAST cmdty_get_quotes, NULL);
source = gnc_commodity_get_quote_source(com);
@@ -192,6 +198,31 @@
return TRUE;
}
+static gnc_commodity *
+gnc_commodity_find_currency (QofBook *book, xmlNodePtr tree)
+{
+ gnc_commodity_table * table;
+ gchar *exchange = NULL, *mnemonic = NULL;
+ xmlNodePtr node;
+
+ for(node = tree->xmlChildrenNode; node; node = node->next)
+ {
+ if (safe_strcmp((char*) node->name, cmdty_namespace) == 0)
+ exchange = (gchar*) xmlNodeGetContent (node->xmlChildrenNode);
+ if (safe_strcmp((char*) node->name, cmdty_id) == 0)
+ mnemonic = (gchar*) xmlNodeGetContent (node->xmlChildrenNode);
+ }
+
+ if (!exchange || !mnemonic)
+ return NULL;
+
+ if (!gnc_commodity_namespace_is_iso(exchange))
+ return NULL;
+
+ table = gnc_commodity_table_get_table(book);
+ return gnc_commodity_table_lookup(table, exchange, mnemonic);
+}
+
static gboolean
gnc_commodity_end_handler(gpointer data_for_children,
GSList* data_from_children, GSList* sibling_data,
@@ -217,9 +248,11 @@
}
g_return_val_if_fail(tree, FALSE);
-
- com = gnc_commodity_new(book, NULL, NULL, NULL, NULL, 0);
+ com = gnc_commodity_find_currency(book, tree);
+ if (!com)
+ com = gnc_commodity_new(book, NULL, NULL, NULL, NULL, 0);
+
for(achild = tree->xmlChildrenNode; achild; achild = achild->next)
{
set_commodity_value(achild, com);
Modified: gnucash/trunk/src/backend/file/io-gncxml-v2.c
===================================================================
--- gnucash/trunk/src/backend/file/io-gncxml-v2.c 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/backend/file/io-gncxml-v2.c 2006-04-03 21:39:25 UTC (rev 13731)
@@ -953,36 +953,26 @@
for(lp = namespaces; lp; lp = lp->next)
{
- gchar *space;
+ GList *comms, *lp2;
+ xmlNodePtr comnode;
- if(!lp->data) {
- g_list_free (namespaces);
- return;
- }
+ comms = gnc_commodity_table_get_commodities(tbl, lp->data);
+ comms = g_list_sort(comms, compare_commodity_ids);
- space = (gchar *) lp->data;
- if(!gnc_commodity_namespace_is_iso(space))
- {
- GList *comms = gnc_commodity_table_get_commodities(tbl, space);
- GList *lp2;
+ for(lp2 = comms; lp2; lp2 = lp2->next) {
+ comnode = gnc_commodity_dom_tree_create(lp2->data);
+ if (comnode == NULL)
+ continue;
- comms = g_list_sort(comms, compare_commodity_ids);
+ xmlElemDump(out, NULL, comnode);
+ fprintf(out, "\n");
- for(lp2 = comms; lp2; lp2 = lp2->next)
- {
- xmlNodePtr comnode = gnc_commodity_dom_tree_create(
- (gnc_commodity *) lp2->data);
+ xmlFreeNode(comnode);
+ gd->counter.commodities_loaded++;
+ run_callback(gd, "commodities");
+ }
- xmlElemDump(out, NULL, comnode);
- fprintf(out, "\n");
-
- xmlFreeNode(comnode);
- gd->counter.commodities_loaded++;
- run_callback(gd, "commodities");
- }
-
- g_list_free (comms);
- }
+ g_list_free (comms);
}
if (namespaces) g_list_free (namespaces);
Modified: gnucash/trunk/src/backend/file/sixtp-dom-generators.c
===================================================================
--- gnucash/trunk/src/backend/file/sixtp-dom-generators.c 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/backend/file/sixtp-dom-generators.c 2006-04-03 21:39:25 UTC (rev 13731)
@@ -110,7 +110,7 @@
return NULL;
}
- xmlNewTextChild(ret, NULL, BAD_CAST "cmdty:space", BAD_CAST gnc_commodity_get_namespace(c));
+ xmlNewTextChild(ret, NULL, BAD_CAST "cmdty:space", BAD_CAST gnc_commodity_get_namespace_compat(c));
xmlNewTextChild(ret, NULL, BAD_CAST "cmdty:id", BAD_CAST gnc_commodity_get_mnemonic(c));
return ret;
Modified: gnucash/trunk/src/engine/gnc-commodity.c
===================================================================
--- gnucash/trunk/src/engine/gnc-commodity.c 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/engine/gnc-commodity.c 2006-04-03 21:39:25 UTC (rev 13731)
@@ -69,7 +69,8 @@
{
QofInstance inst;
- char * name;
+ gchar * name;
+ gboolean iso4217;
GHashTable * cm_table;
GList * cm_list;
};
@@ -528,6 +529,8 @@
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.entity, QOF_EVENT_CREATE, NULL);
return retval;
@@ -638,6 +641,15 @@
return gnc_commodity_namespace_get_name(cm->namespace);
}
+const char *
+gnc_commodity_get_namespace_compat(const gnc_commodity * cm)
+{
+ if (!cm || !cm->namespace) return NULL;
+ if (cm->namespace->iso4217)
+ return GNC_COMMODITY_NS_ISO;
+ return gnc_commodity_namespace_get_name(cm->namespace);
+}
+
gnc_commodity_namespace *
gnc_commodity_get_namespace_ds(const gnc_commodity * cm)
{
@@ -783,6 +795,8 @@
return;
cm->namespace = nsp;
+ if (nsp->iso4217)
+ cm->quote_source = gnc_quote_source_lookup_by_internal("currency");
mark_commodity_dirty(cm);
reset_printname(cm);
reset_unique_name(cm);
@@ -981,9 +995,18 @@
gboolean
gnc_commodity_namespace_is_iso(const char *namespace)
{
- return (safe_strcmp(namespace, GNC_COMMODITY_NS_ISO) == 0);
+ return ((safe_strcmp(namespace, GNC_COMMODITY_NS_ISO) == 0) ||
+ (safe_strcmp(namespace, GNC_COMMODITY_NS_CURRENCY) == 0));
}
+static const gchar *
+gnc_commodity_table_map_namespace(const char * namespace)
+{
+ if (safe_strcmp(namespace, GNC_COMMODITY_NS_ISO) == 0)
+ return GNC_COMMODITY_NS_CURRENCY;
+ return namespace;
+}
+
/********************************************************************
* gnc_commodity_table_new
* make a new commodity table
@@ -1327,11 +1350,8 @@
gboolean
gnc_commodity_is_iso(const gnc_commodity * cm)
{
- const gchar *ns_name;
-
- if (!cm) return FALSE;
- ns_name = gnc_commodity_namespace_get_name(cm->namespace);
- return (safe_strcmp(ns_name, GNC_COMMODITY_NS_ISO) == 0);
+ if (!cm || !cm->namespace) return FALSE;
+ return cm->namespace->iso4217;
}
gboolean
@@ -1450,12 +1470,14 @@
if (!table) return NULL;
+ namespace = gnc_commodity_table_map_namespace(namespace);
ns = gnc_commodity_table_find_namespace(table, namespace);
if(!ns)
{
ns = g_new0(gnc_commodity_namespace, 1);
ns->cm_table = g_hash_table_new(g_str_hash, g_str_equal);
ns->name = gnc_string_cache_insert((gpointer)namespace);
+ ns->iso4217 = gnc_commodity_namespace_is_iso(namespace);
qof_instance_init (&ns->inst, GNC_ID_COMMODITY_NAMESPACE, book);
qof_event_gen (&ns->inst.entity, QOF_EVENT_CREATE, NULL);
@@ -1476,6 +1498,7 @@
if (!table || !namespace)
return NULL;
+ namespace = gnc_commodity_table_map_namespace(namespace);
return g_hash_table_lookup(table->ns_table, (gpointer)namespace);
}
Modified: gnucash/trunk/src/engine/gnc-commodity.h
===================================================================
--- gnucash/trunk/src/engine/gnc-commodity.h 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/engine/gnc-commodity.h 2006-04-03 21:39:25 UTC (rev 13731)
@@ -69,6 +69,7 @@
*/
#define GNC_COMMODITY_NS_LEGACY "GNC_LEGACY_CURRENCIES"
#define GNC_COMMODITY_NS_ISO "ISO4217"
+#define GNC_COMMODITY_NS_CURRENCY "CURRENCY"
#define GNC_COMMODITY_NS_NASDAQ "NASDAQ"
#define GNC_COMMODITY_NS_NYSE "NYSE"
#define GNC_COMMODITY_NS_EUREX "EUREX"
@@ -313,6 +314,20 @@
*/
const char * gnc_commodity_get_namespace(const gnc_commodity * cm);
+/** Retrieve the namespace for the specified commodity. This will be
+ * a pointer to a null terminated string of the form "AMEX",
+ * "NASDAQ", etc. The only difference between function and
+ * gnc_commodity_get_namespace() is that this function returns
+ * ISO4217 instead of CURRENCY for backward compatability with the
+ * 1.8 data files.
+ *
+ * @param cm A pointer to a commodity data structure.
+ *
+ * @return A pointer to the namespace for this commodity. This string
+ * is owned by the engine and should not be freed by the caller.
+ */
+const char * gnc_commodity_get_namespace_compat(const gnc_commodity * cm);
+
/** Retrieve the namespace data strucure for the specified commodity.
* This will be a pointer to another data structure.
*
Modified: gnucash/trunk/src/gnome/dialog-commodities.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-commodities.c 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/gnome/dialog-commodities.c 2006-04-03 21:39:25 UTC (rev 13731)
@@ -81,7 +81,7 @@
gnc_commodity *commodity;
commodity = gnc_tree_view_commodity_get_selected_commodity (cd->commodity_tree);
- if (commodity == NULL || gnc_commodity_is_iso (commodity))
+ if (commodity == NULL || gnc_commodity_is_currency (commodity))
return;
if (gnc_ui_edit_commodity_modal (commodity, cd->dialog))
@@ -231,13 +231,13 @@
gnc_commodities_dialog_selection_changed (GtkTreeSelection *selection,
CommoditiesDialog *cd)
{
- gboolean sensitive = FALSE;
+ gboolean remove_ok;
gnc_commodity *commodity;
commodity = gnc_tree_view_commodity_get_selected_commodity (cd->commodity_tree);
- sensitive = commodity && !gnc_commodity_is_iso(commodity);
- gtk_widget_set_sensitive (cd->edit_button, sensitive);
- gtk_widget_set_sensitive (cd->remove_button, sensitive);
+ remove_ok = commodity && !gnc_commodity_is_iso(commodity);
+ gtk_widget_set_sensitive (cd->edit_button, commodity != NULL);
+ gtk_widget_set_sensitive (cd->remove_button, remove_ok);
}
void
Modified: gnucash/trunk/src/gnome-utils/dialog-commodity.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-commodity.c 2006-04-03 21:28:07 UTC (rev 13730)
+++ gnucash/trunk/src/gnome-utils/dialog-commodity.c 2006-04-03 21:39:25 UTC (rev 13731)
@@ -581,20 +581,12 @@
case DIAG_COMM_ALL:
namespaces =
gnc_commodity_table_get_namespaces (gnc_get_current_commodities());
-
- /* Replace the string "ISO4217" with "CURRENCY". */
- node = g_list_find_custom (namespaces, GNC_COMMODITY_NS_ISO, g_strcmp);
- if (node) {
- namespaces = g_list_remove_link (namespaces, node);
- g_list_free_1 (node);
- }
- namespaces = g_list_prepend (namespaces, "CURRENCY");
break;
case DIAG_COMM_NON_CURRENCY:
namespaces =
gnc_commodity_table_get_namespaces (gnc_get_current_commodities());
- node = g_list_find_custom (namespaces, GNC_COMMODITY_NS_ISO, g_strcmp);
+ node = g_list_find_custom (namespaces, GNC_COMMODITY_NS_CURRENCY, g_strcmp);
if (node) {
namespaces = g_list_remove_link (namespaces, node);
g_list_free_1 (node);
@@ -606,7 +598,7 @@
case DIAG_COMM_CURRENCY:
default:
- namespaces = g_list_prepend (NULL, "CURRENCY");
+ namespaces = g_list_prepend (NULL, GNC_COMMODITY_NS_CURRENCY);
break;
}
@@ -629,8 +621,7 @@
else
active = "";
- if (safe_strcmp (active, GNC_COMMODITY_NS_ISO) == 0 ||
- safe_strcmp (active, "CURRENCY") == 0 ||
+ if (safe_strcmp (active, "CURRENCY") == 0 ||
safe_strcmp (init_string, "CURRENCY") == 0)
{
active = "CURRENCY";
@@ -650,8 +641,8 @@
namespace = gtk_entry_get_text (GTK_ENTRY(GTK_COMBO (combobox)->entry));
- if (safe_strcmp (namespace, "CURRENCY") == 0)
- return GNC_COMMODITY_NS_ISO;
+ if (safe_strcmp (namespace, GNC_COMMODITY_NS_ISO) == 0)
+ return GNC_COMMODITY_NS_CURRENCY;
else
return namespace;
}
@@ -730,16 +721,21 @@
menu = GTK_MENU(gtk_menu_new());
gtk_widget_show(GTK_WIDGET(menu));
- max = gnc_quote_source_num_entries(type);
- for (i = 0; i < max; i++)
- {
- source = gnc_quote_source_lookup_by_ti(type, i);
- if (source == NULL)
- break;
- item = gtk_menu_item_new_with_label(gnc_quote_source_get_user_name(source));
- gtk_widget_set_sensitive(item, gnc_quote_source_get_supported(source));
+ if (type == SOURCE_CURRENCY) {
+ item = gtk_menu_item_new_with_label(_("Currency"));
gtk_widget_show(item);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ } else {
+ max = gnc_quote_source_num_entries(type);
+ for (i = 0; i < max; i++) {
+ source = gnc_quote_source_lookup_by_ti(type, i);
+ if (source == NULL)
+ break;
+ item = gtk_menu_item_new_with_label(gnc_quote_source_get_user_name(source));
+ gtk_widget_set_sensitive(item, gnc_quote_source_get_supported(source));
+ gtk_widget_show(item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ }
}
omenu = gtk_option_menu_new();
@@ -885,7 +881,11 @@
/* Build custom widgets */
box = glade_xml_get_widget (xml, "single_source_box");
- menu = gnc_ui_source_menu_create(SOURCE_SINGLE);
+ if (gnc_commodity_namespace_is_iso(selected_namespace)) {
+ menu = gnc_ui_source_menu_create(SOURCE_CURRENCY);
+ } else {
+ menu = gnc_ui_source_menu_create(SOURCE_SINGLE);
+ }
retval->source_menu[SOURCE_SINGLE] = menu;
gtk_box_pack_start(GTK_BOX(box), menu, TRUE, TRUE, 0);
More information about the gnucash-changes
mailing list