From 23926cd141bb895519cc660bacb744262598351c Mon Sep 17 00:00:00 2001 From: David Hampton Date: Sat, 22 Jun 2002 22:15:54 +0000 Subject: [PATCH] Optional module loading. Latest OFX changes. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6998 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 15 +++++++++++++++ src/gnc-module/gnc-module.c | 21 +++++++++++++++++---- src/gnc-module/gnc-module.h | 1 + src/gnc-module/gnc-module.scm | 1 + src/gnc-module/gw-gnc-module-spec.scm | 6 ++++++ src/gnome/window-main.c | 23 +++++++++++++++-------- src/import-export/Makefile.am | 3 ++- src/import-export/gncmod-generic-import.c | 6 ------ src/import-export/ofx/gnc-ofx-import.c | 5 +++-- src/import-export/ofx/gncmod-ofx-import.c | 2 -- src/scm/main.scm | 1 + 11 files changed, 61 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51f1d6cebf..1968d37c1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2002-06-22 David Hampton + + * src/gnc-module/gnc-module.{c,h,scm} : + * src/gnc-module/gw-gnc-module-spec.scm : Add support for loading + an optional module. I.E. Don't complain if you can't find it. + + * src/gnome/window-main.c : Add a File/Import submenu that will + contain entries for QIF, OFX, etc. + + * src/import-export/Makefile.am : + * src/import-export/gncmod-generic-import.c : + * src/import-export/ofx/gnc-ofx-import.c : + * src/import-export/ofx/gncmod-ofx-import.c : + * src/scm/main.scm : OFX module loading tweaks. + 2002-06-21 Derek Atkins * integrate the Billing Terms into the Core, GUI, and XML Backend diff --git a/src/gnc-module/gnc-module.c b/src/gnc-module/gnc-module.c index 822744abe9..b94139dabf 100644 --- a/src/gnc-module/gnc-module.c +++ b/src/gnc-module/gnc-module.c @@ -415,8 +415,8 @@ gnc_module_check_loaded(const char * module_name, gint interface) * Ensure that the module named by "module_name" is loaded. *************************************************************/ -GNCModule -gnc_module_load(char * module_name, gint interface) +static GNCModule +gnc_module_load_common(char * module_name, gint interface, gboolean optional) { GNCLoadedModule * info; @@ -499,18 +499,31 @@ gnc_module_load(char * module_name, gint interface) } return info; } - else + else if (!optional) { g_warning ("Failed to open module %s", module_name); if(modinfo) printf(": %s\n", lt_dlerror()); else g_warning (": could not locate %s interface v.%d\n", module_name, interface); return NULL; - } + } + return NULL; } } +GNCModule +gnc_module_load(char * module_name, gint interface) +{ + return gnc_module_load_common(module_name, interface, FALSE); +} + +GNCModule +gnc_module_load_optional(char * module_name, gint interface) +{ + return gnc_module_load_common(module_name, interface, TRUE); +} + /************************************************************* * gnc_module_unload * unload a module (only actually unload it if the use count goes to 0) diff --git a/src/gnc-module/gnc-module.h b/src/gnc-module/gnc-module.h index 690dd046c0..6f012234ab 100644 --- a/src/gnc-module/gnc-module.h +++ b/src/gnc-module/gnc-module.h @@ -35,6 +35,7 @@ GList * gnc_module_system_modinfo(void); /* load and unload a module. gnc_module_system_init() must be called * before loading and unloading. */ GNCModule gnc_module_load(gchar * module_name, gint interface); +GNCModule gnc_module_load_optional(gchar * module_name, gint interface); int gnc_module_unload(GNCModule mod); GNCModuleInfo * gnc_module_get_info(const char * lib_path); int gnc_module_use_scm_module(gchar * module_path); diff --git a/src/gnc-module/gnc-module.scm b/src/gnc-module/gnc-module.scm index 95a6bc62ba..d672131d6e 100644 --- a/src/gnc-module/gnc-module.scm +++ b/src/gnc-module/gnc-module.scm @@ -15,6 +15,7 @@ ;; symbols from gw-gnc-module (export gnc:module-system-refresh) (export gnc:module-load) +(export gnc:module-load-optional) (export gnc:module-unload) (export gnc:module-lookup) diff --git a/src/gnc-module/gw-gnc-module-spec.scm b/src/gnc-module/gw-gnc-module-spec.scm index 12e37bc343..3166f2a194 100644 --- a/src/gnc-module/gw-gnc-module-spec.scm +++ b/src/gnc-module/gw-gnc-module-spec.scm @@ -32,6 +32,12 @@ '((( caller-owned) module-name) ( interface)) "Load and initialize a gnc-module") + (gw:wrap-function + ws 'gnc:module-load-optional + ' "gnc_module_load_optional" + '((( caller-owned) module-name) ( interface)) + "Load and initialize a gnc-module if present") + (gw:wrap-function ws 'gnc:module-unload ' "gnc_module_unload" diff --git a/src/gnome/window-main.c b/src/gnome/window-main.c index 3d5c9fbbdd..5db1d79d43 100644 --- a/src/gnome/window-main.c +++ b/src/gnome/window-main.c @@ -797,6 +797,19 @@ gnc_main_window_create_menus(GNCMDIInfo * maininfo) GNOMEUIINFO_END }; + static GnomeUIInfo gnc_file_import_submenu_template[] = + { + { + GNOME_APP_UI_ITEM, + N_("Import _QIF..."), + N_("Import a Quicken QIF file"), + gnc_main_window_file_import_cb, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CONVERT, + 'i', GDK_CONTROL_MASK, NULL + }, + GNOMEUIINFO_END + }; + static GnomeUIInfo gnc_file_export_submenu_template[] = { { @@ -837,14 +850,8 @@ gnc_main_window_create_menus(GNCMDIInfo * maininfo) GNOMEUIINFO_MENU_SAVE_ITEM(gnc_main_window_file_save_cb, NULL), GNOMEUIINFO_MENU_SAVE_AS_ITEM(gnc_main_window_file_save_as_cb, NULL), GNOMEUIINFO_SEPARATOR, - { - GNOME_APP_UI_ITEM, - N_("_Import QIF..."), - N_("Import a Quicken QIF file"), - gnc_main_window_file_import_cb, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CONVERT, - 'i', GDK_CONTROL_MASK, NULL - }, + GNOMEUIINFO_SUBTREE( N_("_Import"), + gnc_file_import_submenu_template ), GNOMEUIINFO_SUBTREE( N_("_Export"), gnc_file_export_submenu_template ), GNOMEUIINFO_SEPARATOR, diff --git a/src/import-export/Makefile.am b/src/import-export/Makefile.am index 272764429d..792fd6e1c5 100644 --- a/src/import-export/Makefile.am +++ b/src/import-export/Makefile.am @@ -3,7 +3,8 @@ SUBDIRS = . binary-import qif-import ${OFX_DIR} test pkglib_LTLIBRARIES=libgncmod-generic-import.la libgncmod_generic_import_la_SOURCES = \ - gnc-generic-import.c + gnc-generic-import.c \ + gncmod-generic-import.c noinst_HEADERS = \ gnc-generic-import.h diff --git a/src/import-export/gncmod-generic-import.c b/src/import-export/gncmod-generic-import.c index 1b59d22902..1d1c21fab3 100644 --- a/src/import-export/gncmod-generic-import.c +++ b/src/import-export/gncmod-generic-import.c @@ -43,12 +43,6 @@ gnc_module_init(int refcount) { return FALSE; } - if(!gnc_module_load("gnucash/import-export", 0)) - { - return FALSE; - } - gh_eval_str("(use-modules (gnucash import-export))"); - printf("Generic import module loaded\n"); return TRUE; } diff --git a/src/import-export/ofx/gnc-ofx-import.c b/src/import-export/ofx/gnc-ofx-import.c index fcc68f01f8..ec4c9a5fe5 100644 --- a/src/import-export/ofx/gnc-ofx-import.c +++ b/src/import-export/ofx/gnc-ofx-import.c @@ -224,13 +224,14 @@ int ofx_proc_transaction(struct OfxTransactionData data) } xaccTransSetNotes(transaction, notes); g_free(notes); - + xaccTransSetCurrency(transaction,xaccAccountGetCommodity(account)); if(data.amount_valid==true){ split=xaccMallocSplit(book); xaccTransAppendSplit(transaction,split); xaccAccountInsertSplit(account,split); gnc_amount = double_to_gnc_numeric(data.amount,xaccAccountGetCommoditySCU(account),GNC_RND_ROUND); - xaccSplitSetValue(split, gnc_amount); + xaccSplitSetBaseValue(split, gnc_amount,xaccAccountGetCommodity(account)); + } xaccTransCommitEdit(transaction); //printf("Now calling gnc_import_add_trans()\n"); diff --git a/src/import-export/ofx/gncmod-ofx-import.c b/src/import-export/ofx/gncmod-ofx-import.c index acc37ffdaf..1c788e746b 100644 --- a/src/import-export/ofx/gncmod-ofx-import.c +++ b/src/import-export/ofx/gncmod-ofx-import.c @@ -46,8 +46,6 @@ gnc_module_init(int refcount) { return FALSE; } - gh_eval_str("(use-modules (gnucash import-export ofx))"); - printf("OFX module loaded\n"); return TRUE; } diff --git a/src/scm/main.scm b/src/scm/main.scm index 9ded5e2ebd..ffe40fb8e9 100644 --- a/src/scm/main.scm +++ b/src/scm/main.scm @@ -374,6 +374,7 @@ string and 'directories' must be a list of strings." (gnc:module-load "gnucash/register/register-gnome" 0) (gnc:module-load "gnucash/import-export/binary-import" 0) (gnc:module-load "gnucash/import-export/qif-import" 0) + (gnc:module-load-optional "gnucash/import-export/ofx" 0) (gnc:module-load "gnucash/report/report-system" 0) (gnc:module-load "gnucash/report/stylesheets" 0) (gnc:module-load "gnucash/report/standard-reports" 0)