|
GnuCash 2.4.99
|
00001 /******************************************************************** 00002 * gnc-commodity.h -- API for tradable commodities (incl. currency) * 00003 * * 00004 * This program is free software; you can redistribute it and/or * 00005 * modify it under the terms of the GNU General Public License as * 00006 * published by the Free Software Foundation; either version 2 of * 00007 * the License, or (at your option) any later version. * 00008 * * 00009 * This program is distributed in the hope that it will be useful, * 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00012 * GNU General Public License for more details. * 00013 * * 00014 * You should have received a copy of the GNU General Public License* 00015 * along with this program; if not, contact: * 00016 * * 00017 * Free Software Foundation Voice: +1-617-542-5942 * 00018 * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 * 00019 * Boston, MA 02110-1301, USA gnu@gnu.org * 00020 * * 00021 *******************************************************************/ 00022 00046 #ifndef GNC_COMMODITY_H 00047 #define GNC_COMMODITY_H 00048 00049 typedef struct _GncCommodityClass gnc_commodityClass; 00050 typedef struct _GncCommodityNamespaceClass gnc_commodity_namespaceClass; 00051 00052 #include <glib.h> 00053 #include "gnc-engine.h" 00054 00055 /* --- type macros --- */ 00056 #define GNC_TYPE_COMMODITY (gnc_commodity_get_type ()) 00057 #define GNC_COMMODITY(o) \ 00058 (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_COMMODITY, gnc_commodity)) 00059 #define GNC_COMMODITY_CLASS(k) \ 00060 (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_COMMODITY, gnc_commodityClass)) 00061 #define GNC_IS_COMMODITY(o) \ 00062 (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_COMMODITY)) 00063 #define GNC_IS_COMMODITY_CLASS(k) \ 00064 (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_COMMODITY)) 00065 #define GNC_COMMODITY_GET_CLASS(o) \ 00066 (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_COMMODITY, gnc_commodityClass)) 00067 GType gnc_commodity_get_type(void); 00068 00069 /* --- type macros --- */ 00070 #define GNC_TYPE_COMMODITY_NAMESPACE (gnc_commodity_namespace_get_type ()) 00071 #define GNC_COMMODITY_NAMESPACE(o) \ 00072 (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespace)) 00073 #define GNC_COMMODITY_NAMESPACE_CLASS(k) \ 00074 (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespaceClass)) 00075 #define GNC_IS_COMMODITY_NAMESPACE(o) \ 00076 (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_COMMODITY_NAMESPACE)) 00077 #define GNC_IS_COMMODITY_NAMESPACE_CLASS(k) \ 00078 (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_COMMODITY_NAMESPACE)) 00079 #define GNC_COMMODITY_NAMESPACE_GET_CLASS(o) \ 00080 (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_COMMODITY_NAMESPACE, gnc_commodity_namespaceClass)) 00081 GType gnc_commodity_namespace_get_type(void); 00082 00083 00084 #define GNC_COMMODITY_TABLE "gnc_commodity_table" 00085 00097 #define GNC_COMMODITY_NS_LEGACY "GNC_LEGACY_CURRENCIES" 00098 /* The ISO define is deprecated in favor of CURRENCY */ 00099 #define GNC_COMMODITY_NS_ISO "ISO4217" 00100 #define GNC_COMMODITY_NS_CURRENCY "CURRENCY" 00101 #define GNC_COMMODITY_NS_NASDAQ "NASDAQ" 00102 #define GNC_COMMODITY_NS_NYSE "NYSE" 00103 #define GNC_COMMODITY_NS_EUREX "EUREX" 00104 #define GNC_COMMODITY_NS_MUTUAL "FUND" 00105 #define GNC_COMMODITY_NS_AMEX "AMEX" 00106 #define GNC_COMMODITY_NS_ASX "ASX" 00107 00108 typedef GList CommodityList; 00109 00118 typedef enum 00119 { 00120 SOURCE_SINGLE = 0, 00124 SOURCE_MULTI, 00127 SOURCE_UNKNOWN, 00131 SOURCE_MAX, 00132 SOURCE_CURRENCY = SOURCE_MAX, 00133 } QuoteSourceType; 00134 00141 gboolean gnc_quote_source_fq_installed (void); 00142 00152 void gnc_quote_source_set_fq_installed (const GList *sources_list); 00153 00160 gint gnc_quote_source_num_entries(QuoteSourceType type); 00161 00173 gnc_quote_source *gnc_quote_source_add_new(const char * name, gboolean supported); 00174 00183 /*@ dependent @*/ 00184 gnc_quote_source *gnc_quote_source_lookup_by_internal(const char * internal_name); 00185 00196 gnc_quote_source *gnc_quote_source_lookup_by_ti(QuoteSourceType type, gint index); 00197 00206 gboolean gnc_quote_source_get_supported (const gnc_quote_source *source); 00207 00215 QuoteSourceType gnc_quote_source_get_type (const gnc_quote_source *source); 00216 00224 gint gnc_quote_source_get_index (const gnc_quote_source *source); 00225 00234 /*@ dependent @*/ 00235 const char *gnc_quote_source_get_user_name (const gnc_quote_source *source); 00236 00245 /*@ dependent @*/ 00246 const char *gnc_quote_source_get_internal_name (const gnc_quote_source *source); 00247 00287 /*@ dependent @*/ 00288 gnc_commodity * gnc_commodity_new(QofBook *book, 00289 /*@ null @*/ const char * fullname, 00290 /*@ null @*/ const char * commodity_namespace, 00291 /*@ null @*/ const char * mnemonic, 00292 /*@ null @*/ const char * cusip, 00293 int fraction); 00294 00300 void gnc_commodity_destroy(gnc_commodity * cm); 00301 00303 void gnc_commodity_copy(gnc_commodity * dest, const gnc_commodity *src); 00304 00306 gnc_commodity * gnc_commodity_clone(const gnc_commodity *src, QofBook *dest_book); 00324 const char * gnc_commodity_get_mnemonic(const gnc_commodity * cm); 00325 00335 const char * gnc_commodity_get_namespace(const gnc_commodity * cm); 00336 00349 const char * gnc_commodity_get_namespace_compat(const gnc_commodity * cm); 00350 00359 gnc_commodity_namespace *gnc_commodity_get_namespace_ds(const gnc_commodity * cm); 00360 00370 const char * gnc_commodity_get_fullname(const gnc_commodity * cm); 00371 00382 const char * gnc_commodity_get_printname(const gnc_commodity * cm); 00383 00399 const char * gnc_commodity_get_cusip(const gnc_commodity * cm); 00400 00412 const char * gnc_commodity_get_unique_name(const gnc_commodity * cm); 00413 00424 int gnc_commodity_get_fraction(const gnc_commodity * cm); 00425 00435 gboolean gnc_commodity_get_quote_flag(const gnc_commodity *cm); 00436 00445 /*@ dependent @*/ 00446 gnc_quote_source* gnc_commodity_get_quote_source(const gnc_commodity *cm); 00447 /*@ dependent @*/ 00448 gnc_quote_source* gnc_commodity_get_default_quote_source(const gnc_commodity *cm); 00449 00460 const char* gnc_commodity_get_quote_tz(const gnc_commodity *cm); 00479 void gnc_commodity_set_mnemonic(gnc_commodity * cm, const char * mnemonic); 00480 00491 void gnc_commodity_set_namespace(gnc_commodity * cm, const char * new_namespace); 00492 00503 void gnc_commodity_set_fullname(gnc_commodity * cm, const char * fullname); 00504 00519 void gnc_commodity_set_cusip(gnc_commodity * cm, const char * cusip); 00520 00531 void gnc_commodity_set_fraction(gnc_commodity * cm, int smallest_fraction); 00532 00547 void gnc_commodity_user_set_quote_flag(gnc_commodity *cm, 00548 const gboolean flag); 00549 00559 void gnc_commodity_set_quote_flag(gnc_commodity *cm, const gboolean flag); 00560 00570 void gnc_commodity_set_quote_source(gnc_commodity *cm, gnc_quote_source *src); 00571 00583 void gnc_commodity_set_quote_tz(gnc_commodity *cm, const char *tz); 00597 void 00598 gnc_commodity_increment_usage_count(gnc_commodity *cm); 00599 00606 void 00607 gnc_commodity_decrement_usage_count(gnc_commodity *cm); 00621 gboolean gnc_commodity_equiv(const gnc_commodity * a, const gnc_commodity * b); 00622 00627 gboolean gnc_commodity_equal(const gnc_commodity * a, const gnc_commodity * b); 00628 00636 int gnc_commodity_compare(const gnc_commodity * a, const gnc_commodity * b); 00637 00642 int gnc_commodity_compare_void(const void * a, const void * b); 00656 gboolean gnc_commodity_namespace_is_iso(const char *commodity_namespace); 00657 00663 gboolean gnc_commodity_is_iso(const gnc_commodity * cm); 00664 00671 gboolean gnc_commodity_is_currency(const gnc_commodity *cm); 00672 00676 /* =============================================================== */ 00683 /*@ dependent @*/ 00684 gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book); 00685 00687 /* ---------------------------------------------------------- */ 00691 gnc_commodity * gnc_commodity_table_lookup(const gnc_commodity_table * table, 00692 const char * commodity_namespace, 00693 const char * mnemonic); 00694 gnc_commodity * 00695 gnc_commodity_table_lookup_unique(const gnc_commodity_table *table, 00696 const char * unique_name); 00697 gnc_commodity * gnc_commodity_table_find_full(const gnc_commodity_table * t, 00698 const char * commodity_namespace, 00699 const char * fullname); 00700 00701 /*@ dependent @*/ 00702 gnc_commodity * gnc_commodity_find_commodity_by_guid(const GncGUID *guid, 00703 QofBook *book); 00704 00706 /* ---------------------------------------------------------- */ 00707 00726 /*@ dependent @*/ 00727 gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table * table, 00728 gnc_commodity * comm); 00729 00736 void gnc_commodity_table_remove(gnc_commodity_table * table, 00737 gnc_commodity * comm); 00738 00747 gboolean gnc_commodity_table_add_default_data(gnc_commodity_table *table, QofBook *book); 00748 00750 /* ---------------------------------------------------------- */ 00761 const char * gnc_commodity_namespace_get_name (const gnc_commodity_namespace *ns) ; 00762 00763 00770 GList * gnc_commodity_namespace_get_commodity_list(const gnc_commodity_namespace * ns); 00771 00772 00781 int gnc_commodity_table_has_namespace(const gnc_commodity_table * table, 00782 const char * commodity_namespace); 00783 00791 GList * gnc_commodity_table_get_namespaces(const gnc_commodity_table * t); 00792 00800 GList * gnc_commodity_table_get_namespaces_list(const gnc_commodity_table * t); 00801 00812 gnc_commodity_namespace * gnc_commodity_table_add_namespace(gnc_commodity_table * table, 00813 const char * commodity_namespace, 00814 QofBook *book); 00815 00824 gnc_commodity_namespace * gnc_commodity_table_find_namespace(const gnc_commodity_table * table, 00825 const char * commodity_namespace); 00826 00836 void gnc_commodity_table_delete_namespace(gnc_commodity_table * table, 00837 const char * commodity_namespace); 00839 /* ---------------------------------------------------------- */ 00850 guint gnc_commodity_table_get_size(const gnc_commodity_table* tbl); 00851 00864 CommodityList * gnc_commodity_table_get_commodities( 00865 const gnc_commodity_table * table, const char * commodity_namespace); 00866 00884 CommodityList * gnc_commodity_table_get_quotable_commodities( 00885 const gnc_commodity_table * table); 00886 00897 gboolean gnc_commodity_table_foreach_commodity(const gnc_commodity_table * table, 00898 gboolean (*f)(gnc_commodity *cm, 00899 gpointer user_data), 00900 gpointer user_data); 00904 /* ---------------------------------------------------------- */ 00913 gnc_commodity_table * gnc_commodity_table_new(void); 00914 void gnc_commodity_table_destroy(gnc_commodity_table * table); 00915 00921 gnc_commodity * gnc_commodity_obtain_twin (const gnc_commodity *findlike, QofBook *book); 00922 00927 gboolean gnc_commodity_table_register (void); 00928 00929 void gnc_commodity_begin_edit (gnc_commodity *cm); 00930 void gnc_commodity_commit_edit (gnc_commodity *cm); 00931 00937 struct _gnc_monetary 00938 { 00939 gnc_commodity *commodity; 00940 gnc_numeric value; 00941 }; 00942 00943 typedef struct _gnc_monetary gnc_monetary; 00944 00945 /* A list of monetary values. This could be a hash table, but as currently 00946 * used it rarely contains more than one or two different commodities so 00947 * it doesn't seem worth the trouble. 00948 */ 00949 typedef GList MonetaryList; 00950 00954 static inline 00955 gnc_monetary gnc_monetary_create(gnc_commodity *commod, gnc_numeric val) 00956 { 00957 gnc_monetary out; 00958 out.commodity = commod; 00959 out.value = val; 00960 return out; 00961 } 00967 static inline 00968 gnc_commodity * gnc_monetary_commodity(gnc_monetary a) 00969 { 00970 return a.commodity; 00971 } 00972 00973 static inline 00974 gnc_numeric gnc_monetary_value(gnc_monetary a) 00975 { 00976 return a.value; 00977 } 00985 MonetaryList *gnc_monetary_list_add_monetary(MonetaryList *list, gnc_monetary mon); 00986 00988 static inline 00989 MonetaryList *gnc_monetary_list_add_value(MonetaryList *list, 00990 gnc_commodity *commod, 00991 gnc_numeric value) 00992 { 00993 return gnc_monetary_list_add_monetary(list, 00994 gnc_monetary_create(commod, value)); 00995 } 00996 00998 MonetaryList *gnc_monetary_list_delete_zeros(MonetaryList *list); 00999 01001 void gnc_monetary_list_free(MonetaryList *list); 01006 #endif /* GNC_COMMODITY_H */ 01007
1.7.4