File 0001-aqbanking5-support.patch of Package kmymoney
From 90153841a06712b0cc9b30190b9f1adc189a3f45 Mon Sep 17 00:00:00 2001
From: Sebastian Held <sebastian.held@gmx.de>
Date: Mon, 6 Sep 2010 21:09:43 +0200
Subject: [PATCH] aqbanking5 support
---
diff --git a/cmake/modules/FindAqBanking.cmake b/cmake/modules/FindAqBanking.cmake
index e2afa127bd8224a70d03211d2c96bd100be4a0ae..de0058a16cfe066d139dac19cdef1538c7b78213 100644
--- a/cmake/modules/FindAqBanking.cmake
+++ b/cmake/modules/FindAqBanking.cmake
@@ -13,9 +13,12 @@ endif(NOT AQBANKING_MIN_VERSION)
if(NOT AQBANKING_MAX_VERSION)
# for some unknown reason, we need to give a micro version number
- # with an offset of 1 to the PKG_CHECK_MODULES macro. The actual
- # version KBanking will work with is 4.99.8
- set(AQBANKING_MAX_VERSION "4.99.9")
+ # with an offset of 1 to the PKG_CHECK_MODULES macro.
+ # The actual version of KBanking will work with is 4.99.8
+
+ # set(AQBANKING_MAX_VERSION "4.99.9")
+
+ # Currently there is no max version necessary
endif(NOT AQBANKING_MAX_VERSION)
if(AQBANKING_INCLUDE_DIRS AND AQBANKING_LIBRARIES)
@@ -23,11 +26,15 @@ if(AQBANKING_INCLUDE_DIRS AND AQBANKING_LIBRARIES)
set(AQBANKING_FIND_QUIETLY TRUE)
endif(AQBANKING_INCLUDE_DIRS AND AQBANKING_LIBRARIES)
-PKG_CHECK_MODULES(AQBANKING aqbanking>=${AQBANKING_MIN_VERSION} aqbanking<=${AQBANKING_MAX_VERSION})
+if(AQBANKING_MIN_VERSION AND AQBANKING_MAX_VERSION)
+ PKG_CHECK_MODULES(AQBANKING aqbanking>=${AQBANKING_MIN_VERSION} aqbanking<=${AQBANKING_MAX_VERSION})
+else (AQBANKING_MIN_VERSION AND AQBANKING_MAX_VERSION)
+ PKG_CHECK_MODULES(AQBANKING aqbanking>=${AQBANKING_MIN_VERSION})
+endif (AQBANKING_MIN_VERSION AND AQBANKING_MAX_VERSION)
if(${AQBANKING_FOUND})
- # if AqBanking has been found make sure to add the q4banking lib
- set(AQBANKING_LIBRARIES ${AQBANKING_LIBRARIES} q4banking)
+ # the plugin requires Qt3Support and kde3support
+ set(AQBANKING_LIBRARIES ${AQBANKING_LIBRARIES} Qt3Support kde3support)
endif(${AQBANKING_FOUND})
mark_as_advanced(AQBANKING_INCLUDE_DIRS AQBANKING_LIBRARIES)
diff --git a/cmake/modules/FindGwenhywfar.cmake b/cmake/modules/FindGwenhywfar.cmake
index 600570e838b861d4121f2b854a16eb729c46f744..2702812890bb02e5d70239794576b30e1d7b18df 100644
--- a/cmake/modules/FindGwenhywfar.cmake
+++ b/cmake/modules/FindGwenhywfar.cmake
@@ -19,12 +19,25 @@ endif(GWENHYWFAR_INCLUDE_DIRS AND GWENHYWFAR_LIBRARIES)
PKG_CHECK_MODULES(GWENHYWFAR gwenhywfar>=${GWENHYWFAR_MIN_VERSION})
if(${GWENHYWFAR_FOUND})
- find_library(GWENHYWFAR_GUI_LIBRARY NAMES gwengui-qt4 libgwengui-qt4
- HINTS ${GWENHYWFAR_LIBRARY_DIRS})
- if(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
- set(GWENHYWFAR_GUI_LIBRARY "")
- endif(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
- set(GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${GWENHYWFAR_GUI_LIBRARY})
+ if(${GWENHYWFAR_VERSION} VERSION_GREATER 4.0.0)
+ PKG_CHECK_MODULES(QT4GUI gwengui-qt4)
+ if (NOT ${QT4GUI_FOUND})
+ set(GWENHYWFAR_FOUND FALSE)
+ unset(GWENHYWFAR_INCLUDE_DIRS)
+ unset(GWENHYWFAR_LIBRARIES)
+ unset(GWENHYWFAR_VERSION)
+ message(STATUS "Gwenhywfar does not have the Q4Banking frontend enabled")
+ endif (NOT ${QT4GUI_FOUND})
+ endif(${GWENHYWFAR_VERSION} VERSION_GREATER 4.0.0)
+
+ if(${GWENHYWFAR_FOUND})
+ find_library(GWENHYWFAR_GUI_LIBRARY NAMES gwengui-qt4 libgwengui-qt4
+ HINTS ${GWENHYWFAR_LIBRARY_DIRS})
+ if(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
+ set(GWENHYWFAR_GUI_LIBRARY "")
+ endif(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
+ set(GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${GWENHYWFAR_GUI_LIBRARY})
+ endif(${GWENHYWFAR_FOUND})
endif(${GWENHYWFAR_FOUND})
mark_as_advanced(GWENHYWFAR_INCLUDE_DIRS GWENHYWFAR_LIBRARIES)
diff --git a/kmymoney/plugins/kbanking/CMakeLists.txt b/kmymoney/plugins/kbanking/CMakeLists.txt
index df1469c39886e5a07fb9cfba97892eeea47856fa..b10822a1cd67faf65e9e591940a4710a123a0816 100644
--- a/kmymoney/plugins/kbanking/CMakeLists.txt
+++ b/kmymoney/plugins/kbanking/CMakeLists.txt
@@ -17,7 +17,11 @@ ADD_SUBDIRECTORY( widgets )
########### next target ###############
-SET(kmm_kbanking_PART_SRCS kbanking.cpp mymoneybanking.cpp)
+SET(kmm_kbanking_PART_SRCS
+ kbanking.cpp
+ mymoneybanking.cpp
+ banking.cpp
+ )
KDE4_ADD_PLUGIN(kmm_kbanking ${kmm_kbanking_PART_SRCS})
diff --git a/kmymoney/plugins/kbanking/banking.cpp b/kmymoney/plugins/kbanking/banking.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5e0793676d8d301ae22f789bff547581523a75e6
--- /dev/null
+++ b/kmymoney/plugins/kbanking/banking.cpp
@@ -0,0 +1,435 @@
+/***************************************************************************
+ begin : Mon Mar 01 2004
+ copyright : (C) 2004 by Martin Preuss
+ email : martin@libchipcard.de
+
+ ***************************************************************************
+ * This file is part of the project "AqBanking". *
+ * Please see toplevel file COPYING of that project for license details. *
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config-kmymoney.h>
+#endif
+
+
+#include "banking.hpp"
+#include <aqbanking/banking_be.h>
+#include <aqbanking/banking_cfg.h>
+#include <assert.h>
+
+#include <gwenhywfar/inherit.h>
+#include <gwenhywfar/debug.h>
+
+
+
+AB_Banking::AB_Banking(const char *appname, const char *fname) {
+ assert(appname);
+ _banking=AB_Banking_new(appname, fname, 0);
+}
+
+
+
+AB_Banking::~AB_Banking(){
+ DBG_NOTICE(AQBANKING_LOGDOMAIN, "~AB_Banking: Freeing AB_Banking");
+ AB_Banking_free(_banking);
+}
+
+
+
+int AB_Banking::init(){
+ return AB_Banking_Init(_banking);
+}
+
+
+
+int AB_Banking::fini(){
+ return AB_Banking_Fini(_banking);
+}
+
+
+
+int AB_Banking::onlineInit(){
+ return AB_Banking_OnlineInit(_banking);
+}
+
+
+
+int AB_Banking::onlineFini(){
+ return AB_Banking_OnlineFini(_banking);
+}
+
+
+
+const char *AB_Banking::getAppName(){
+ return AB_Banking_GetAppName(_banking);
+}
+
+
+
+std::list<AB_ACCOUNT*> AB_Banking::getAccounts(){
+ AB_ACCOUNT_LIST2 *ll;
+ std::list<AB_ACCOUNT*> rl;
+
+ ll=AB_Banking_GetAccounts(_banking);
+ if (ll) {
+ AB_ACCOUNT *a;
+ AB_ACCOUNT_LIST2_ITERATOR *it;
+
+ it=AB_Account_List2_First(ll);
+ assert(it);
+ a=AB_Account_List2Iterator_Data(it);
+ assert(a);
+ while(a) {
+ rl.push_back(a);
+ a=AB_Account_List2Iterator_Next(it);
+ }
+ AB_Account_List2Iterator_free(it);
+ AB_Account_List2_free(ll);
+ }
+ return rl;
+}
+
+
+
+AB_ACCOUNT *AB_Banking::getAccount(uint32_t uniqueId){
+ return AB_Banking_GetAccount(_banking, uniqueId);
+}
+
+
+
+std::list<AB_USER*> AB_Banking::getUsers() {
+ AB_USER_LIST2 *ll;
+ std::list<AB_USER*> rl;
+
+ ll=AB_Banking_GetUsers(_banking);
+ if (ll) {
+ AB_USER *a;
+ AB_USER_LIST2_ITERATOR *it;
+
+ it=AB_User_List2_First(ll);
+ assert(it);
+ a=AB_User_List2Iterator_Data(it);
+ assert(a);
+ while(a) {
+ rl.push_back(a);
+ a=AB_User_List2Iterator_Next(it);
+ }
+ AB_User_List2Iterator_free(it);
+ AB_User_List2_free(ll);
+ }
+ return rl;
+}
+
+
+
+int AB_Banking::getUserDataDir(GWEN_BUFFER *buf) const{
+ return AB_Banking_GetUserDataDir(_banking, buf);
+}
+
+
+
+int AB_Banking::getAppUserDataDir(GWEN_BUFFER *buf) const{
+ return AB_Banking_GetAppUserDataDir(_banking, buf);
+}
+
+
+
+AB_BANKING *AB_Banking::getCInterface(){
+ return _banking;
+}
+
+
+
+std::list<std::string> AB_Banking::getActiveProviders(){
+ const GWEN_STRINGLIST *sl;
+ std::list<std::string> l;
+
+ sl=AB_Banking_GetActiveProviders(_banking);
+ if (sl) {
+ GWEN_STRINGLISTENTRY *se;
+
+ se=GWEN_StringList_FirstEntry(sl);
+ assert(se);
+ while(se) {
+ const char *p;
+
+ p=GWEN_StringListEntry_Data(se);
+ assert(p);
+ l.push_back(p);
+ se=GWEN_StringListEntry_Next(se);
+ } /* while */
+ }
+ return l;
+}
+
+
+AB_PROVIDER *AB_Banking::getProvider(const char *name){
+ return AB_Banking_GetProvider(_banking, name);
+}
+
+
+
+bool AB_Banking::importContext(AB_IMEXPORTER_CONTEXT *ctx, uint32_t flags) {
+ AB_IMEXPORTER_ACCOUNTINFO *ai;
+
+ ai=AB_ImExporterContext_GetFirstAccountInfo(ctx);
+ while(ai) {
+ if (!importAccountInfo(ai, flags))
+ return false;
+ ai=AB_ImExporterContext_GetNextAccountInfo(ctx);
+ }
+
+ return true;
+}
+
+
+
+bool AB_Banking::importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO*, uint32_t) {
+ return false;
+}
+
+
+
+int AB_Banking::executeJobs(AB_JOB_LIST2 *jl, AB_IMEXPORTER_CONTEXT *ctx) {
+ return AB_Banking_ExecuteJobs(_banking, jl, ctx);
+}
+
+
+
+int AB_Banking::loadSharedConfig(const char *name, GWEN_DB_NODE **pDb) {
+ return AB_Banking_LoadSharedConfig(_banking, name, pDb);
+}
+
+
+
+int AB_Banking::saveSharedConfig(const char *name, GWEN_DB_NODE *db) {
+ return AB_Banking_SaveSharedConfig(_banking, name, db);
+}
+
+
+
+int AB_Banking::lockSharedConfig(const char *name) {
+ return AB_Banking_LockSharedConfig(_banking, name);
+}
+
+
+
+int AB_Banking::unlockSharedConfig(const char *name) {
+ return AB_Banking_UnlockSharedConfig(_banking, name);
+}
+
+
+
+int AB_Banking::loadSharedSubConfig(const char *name,
+ const char *subGroup,
+ GWEN_DB_NODE **pDb) {
+ GWEN_DB_NODE *dbShared=NULL;
+ int rv;
+
+ rv=loadSharedConfig(name, &dbShared);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to load config (%d)", rv);
+ GWEN_DB_Group_free(dbShared);
+ return rv;
+ }
+ else {
+ GWEN_DB_NODE *dbSrc;
+
+ dbSrc=GWEN_DB_GetGroup(dbShared,
+ GWEN_PATH_FLAGS_NAMEMUSTEXIST,
+ subGroup);
+ if (dbSrc) {
+ *pDb=GWEN_DB_Group_dup(dbSrc);
+ }
+ else {
+ *pDb=GWEN_DB_Group_new("config");
+ }
+ GWEN_DB_Group_free(dbShared);
+
+ return 0;
+ }
+}
+
+
+
+int AB_Banking::saveSharedSubConfig(const char *name,
+ const char *subGroup,
+ GWEN_DB_NODE *dbSrc) {
+ GWEN_DB_NODE *dbShared=NULL;
+ int rv;
+
+ rv=lockSharedConfig(name);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to lock config");
+ return rv;
+ }
+ else {
+ rv=loadSharedConfig(name, &dbShared);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to load config (%d)", rv);
+ unlockSharedConfig(name);
+ return rv;
+ }
+ else {
+ GWEN_DB_NODE *dbDst;
+
+ dbDst=GWEN_DB_GetGroup(dbShared,
+ GWEN_DB_FLAGS_OVERWRITE_GROUPS,
+ subGroup);
+ assert(dbDst);
+ if (dbSrc)
+ GWEN_DB_AddGroupChildren(dbDst, dbSrc);
+ rv=saveSharedConfig(name, dbShared);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to store config (%d)", rv);
+ unlockSharedConfig(name);
+ GWEN_DB_Group_free(dbShared);
+ return rv;
+ }
+ GWEN_DB_Group_free(dbShared);
+ }
+
+ rv=unlockSharedConfig(name);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to unlock config (%d)", rv);
+ return rv;
+ }
+ }
+ return 0;
+}
+
+
+int AB_Banking::loadAppConfig(GWEN_DB_NODE **pDb) {
+ return AB_Banking_LoadAppConfig(_banking, pDb);
+}
+
+
+
+int AB_Banking::saveAppConfig(GWEN_DB_NODE *db) {
+ return AB_Banking_SaveAppConfig(_banking, db);
+}
+
+
+
+int AB_Banking::lockAppConfig() {
+ return AB_Banking_LockAppConfig(_banking);
+}
+
+
+
+int AB_Banking::unlockAppConfig() {
+ return AB_Banking_UnlockAppConfig(_banking);
+}
+
+
+
+int AB_Banking::loadAppSubConfig(const char *subGroup,
+ GWEN_DB_NODE **pDb) {
+ GWEN_DB_NODE *dbApp=NULL;
+ int rv;
+
+ rv=loadAppConfig(&dbApp);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to load config (%d)", rv);
+ GWEN_DB_Group_free(dbApp);
+ return rv;
+ }
+ else {
+ GWEN_DB_NODE *dbSrc;
+
+ dbSrc=GWEN_DB_GetGroup(dbApp,
+ GWEN_PATH_FLAGS_NAMEMUSTEXIST,
+ subGroup);
+ if (dbSrc) {
+ *pDb=GWEN_DB_Group_dup(dbSrc);
+ }
+ else {
+ *pDb=GWEN_DB_Group_new("config");
+ }
+ GWEN_DB_Group_free(dbApp);
+
+ return 0;
+ }
+}
+
+
+
+int AB_Banking::saveAppSubConfig(const char *subGroup,
+ GWEN_DB_NODE *dbSrc) {
+ GWEN_DB_NODE *dbApp=NULL;
+ int rv;
+
+ rv=lockAppConfig();
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to lock config");
+ return rv;
+ }
+ else {
+ rv=loadAppConfig(&dbApp);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to load config (%d)", rv);
+ unlockAppConfig();
+ return rv;
+ }
+ else {
+ GWEN_DB_NODE *dbDst;
+
+ dbDst=GWEN_DB_GetGroup(dbApp,
+ GWEN_DB_FLAGS_OVERWRITE_GROUPS,
+ subGroup);
+ assert(dbDst);
+ if (dbSrc)
+ GWEN_DB_AddGroupChildren(dbDst, dbSrc);
+ rv=saveAppConfig(dbApp);
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to store config (%d)", rv);
+ unlockAppConfig();
+ GWEN_DB_Group_free(dbApp);
+ return rv;
+ }
+ GWEN_DB_Group_free(dbApp);
+ }
+
+ rv=unlockAppConfig();
+ if (rv<0) {
+ DBG_ERROR(0, "Unable to unlock config (%d)", rv);
+ return rv;
+ }
+ }
+ return 0;
+}
+
+
+int AB_Banking::beginExclUseAccount(AB_ACCOUNT *a) {
+ return AB_Banking_BeginExclUseAccount(_banking, a);
+}
+
+
+
+int AB_Banking::endExclUseAccount(AB_ACCOUNT *a, int abandon) {
+ return AB_Banking_EndExclUseAccount(_banking, a, abandon);
+}
+
+
+
+int AB_Banking::beginExclUseUser(AB_USER *u) {
+ return AB_Banking_BeginExclUseUser(_banking, u);
+}
+
+
+
+int AB_Banking::endExclUseUser(AB_USER *u, int abandon) {
+ return AB_Banking_EndExclUseUser(_banking, u, abandon);
+}
+
+
+void AB_Banking::setAccountAlias(AB_ACCOUNT *a, const char *alias) {
+ AB_Banking_SetAccountAlias(_banking, a, alias);
+}
+
+
+
+
+
diff --git a/kmymoney/plugins/kbanking/banking.hpp b/kmymoney/plugins/kbanking/banking.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..0980416dfcd1d34d4c5bd7be288dee805c9113b0
--- /dev/null
+++ b/kmymoney/plugins/kbanking/banking.hpp
@@ -0,0 +1,185 @@
+/***************************************************************************
+ begin : Mon Mar 01 2004
+ copyright : (C) 2004 by Martin Preuss
+ email : martin@libchipcard.de
+
+ ***************************************************************************
+ * This file is part of the project "AqBanking". *
+ * Please see toplevel file COPYING of that project for license details. *
+ ***************************************************************************/
+
+/** @file
+ * @short A C++ wrapper of the main aqbanking interface
+ */
+
+#ifndef AQ_BANKING_CPP_H
+#define AQ_BANKING_CPP_H
+
+
+#include <aqbanking/banking.h>
+#include <aqbanking/system.h>
+
+#include <list>
+#include <string>
+
+
+/**
+ * @brief A C++ binding for the C module @ref AB_BANKING
+ *
+ * This class simply is a C++ binding for the C module @ref AB_BANKING.
+ * It redirects C callbacks used by AB_BANKING to virtual functions in
+ * this class. It als transforms some return values inconveniant for
+ * C++ into STL objects (such as "list<T>").
+ *
+ * @ingroup G_AB_CPP_INTERFACE
+ *
+ * @author Martin Preuss<martin@aquamaniac.de>
+ */
+class AB_Banking {
+private:
+ AB_BANKING *_banking;
+
+public:
+ AB_Banking(const char *appname,
+ const char *fname);
+ virtual ~AB_Banking();
+
+
+ AB_BANKING *getCInterface();
+
+
+ /**
+ * See @ref AB_Banking_Init
+ */
+ virtual int init();
+
+ /**
+ * See @ref AB_Banking_Fini
+ */
+ virtual int fini();
+
+
+ /**
+ * See @ref AB_Banking_OnlineInit
+ */
+ int onlineInit();
+
+ /**
+ * See @ref AB_Banking_OnlineFini
+ */
+ int onlineFini();
+
+ /**
+ * Loads a backend with the given name. You can use
+ * @ref AB_Banking_GetProviderDescrs to retrieve a list of available
+ * backends. Such a backend can then be asked to return an account list.
+ */
+ AB_PROVIDER *getProvider(const char *name);
+
+
+ /**
+ * Returns the application name as given to @ref AB_Banking_new.
+ */
+ const char *getAppName();
+
+ /**
+ * Returns a list of pointers to currently known accounts.
+ * Please note that the pointers in this list are still owned by
+ * AqBanking, so you MUST NOT free them.
+ * However, destroying the list will not free the accounts, so it is
+ * safe to do that.
+ */
+ std::list<AB_ACCOUNT*> getAccounts();
+
+ /**
+ * This function does an account lookup based on the given unique id.
+ * This id is assigned by AqBanking when an account is created.
+ * The pointer returned is still owned by AqBanking, so you MUST NOT free
+ * it.
+ */
+ AB_ACCOUNT *getAccount(uint32_t uniqueId);
+
+ /**
+ * Returns a list of pointers to currently known users.
+ * Please note that the pointers in this list are still owned by
+ * AqBanking, so you MUST NOT free them.
+ * However, destroying the list will not free the users, so it is
+ * safe to do that.
+ */
+ std::list<AB_USER*> getUsers();
+
+ int getUserDataDir(GWEN_BUFFER *buf) const ;
+ int getAppUserDataDir(GWEN_BUFFER *buf) const ;
+
+ int loadAppConfig(GWEN_DB_NODE **pDb);
+ int saveAppConfig(GWEN_DB_NODE *db);
+ int lockAppConfig();
+ int unlockAppConfig();
+
+ int loadAppSubConfig(const char *subGroup,
+ GWEN_DB_NODE **pDb);
+
+ int saveAppSubConfig(const char *subGroup,
+ GWEN_DB_NODE *dbSrc);
+
+
+ int loadSharedConfig(const char *name, GWEN_DB_NODE **pDb);
+ int saveSharedConfig(const char *name, GWEN_DB_NODE *db);
+ int lockSharedConfig(const char *name);
+ int unlockSharedConfig(const char *name);
+
+ int loadSharedSubConfig(const char *name,
+ const char *subGroup,
+ GWEN_DB_NODE **pDb);
+
+ int saveSharedSubConfig(const char *name,
+ const char *subGroup,
+ GWEN_DB_NODE *dbSrc);
+
+ int beginExclUseAccount(AB_ACCOUNT *a);
+ int endExclUseAccount(AB_ACCOUNT *a, int abandon);
+
+ int beginExclUseUser(AB_USER *u);
+ int endExclUseUser(AB_USER *u, int abandon);
+
+ std::list<std::string> getActiveProviders();
+
+ void setAccountAlias(AB_ACCOUNT *a, const char *alias);
+
+
+ /** @name Enqueueing, Dequeueing and Executing Jobs
+ *
+ * Enqueued jobs are preserved across shutdowns. As soon as a job has been
+ * sent to the appropriate backend it will be removed from the queue.
+ * Only those jobs are saved/reloaded which have been enqueued but never
+ * presented to the backend. This means after calling
+ * @ref AB_Banking_ExecuteQueue only those jobs are still in the queue which
+ * have not been processed (e.g. because they belonged to a second backend
+ * but the user aborted while the jobs for a first backend were in process).
+ */
+ /*@{*/
+ /**
+ * This function sends all jobs in the list to their corresponding backends
+ * and allows that backend to process it.
+ */
+ virtual int executeJobs(AB_JOB_LIST2 *jl,
+ AB_IMEXPORTER_CONTEXT *ctx);
+
+ /*@}*/
+
+ /**
+ * Let the application import a given statement context.
+ */
+ virtual bool importContext(AB_IMEXPORTER_CONTEXT *ctx,
+ uint32_t flags);
+
+ virtual bool importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO *ai, uint32_t flags);
+
+};
+
+
+
+
+#endif /* AQ_BANKING_CPP_H */
+
+
diff --git a/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt b/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt
index 28a666ca3c310ee9ebfc355480dca05f37a25f22..6ad7fb16437b15bd015fdd81dc8e2fa37ebf53c8 100644
--- a/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt
+++ b/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt
@@ -5,11 +5,13 @@ SET(kmm_kbanking_dialogs_la_SOURCES
kbaccountsettings.cpp
kbpickstartdate.cpp
kbsettings.cpp
+ kbmapaccount.cpp
)
SET(kmm_kbanking_dialogs_UI
kbaccountsettings.ui
kbpickstartdate.ui
+ kbmapaccount.ui
)
KDE4_ADD_UI_FILES(kmm_kbanking_dialogs_la_SOURCES
diff --git a/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp b/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f39afd47cbd5aa82321a706c1a925d5d91a27ade
--- /dev/null
+++ b/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp
@@ -0,0 +1,107 @@
+/***************************************************************************
+ begin : Mon Mar 01 2004
+ copyright : (C) 2004 by Martin Preuss
+ email : martin@libchipcard.de
+
+ ***************************************************************************
+ * Please see toplevel file COPYING for license details *
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config-kmymoney.h>
+#endif
+
+
+// QBanking includes
+#include "kbmapaccount.h"
+#include "kbaccountlist.h"
+#include "kbanking.h"
+
+// QT includes
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qlineedit.h>
+
+
+
+
+KBMapAccount::KBMapAccount(KBanking *kb,
+ const char *bankCode,
+ const char *accountId,
+ QWidget* parent,
+ Qt::WFlags fl)
+:QDialog(parent, fl)
+,_banking(kb)
+,_account(0) {
+ _ui.setupUi(this);
+
+ _ui.accountList->setSelectionMode(Q3ListView::Single);
+ _ui.accountList->setAllColumnsShowFocus(true);
+
+ if (bankCode)
+ _ui.bankCodeEdit->setText(QString::fromUtf8(bankCode));
+ else
+ _ui.bankCodeEdit->setEnabled(false);
+ if (accountId)
+ _ui.accountIdEdit->setText(QString::fromUtf8(accountId));
+ else
+ _ui.accountIdEdit->setEnabled(false);
+
+ QObject::connect(_ui.accountList, SIGNAL(selectionChanged()),
+ this, SLOT(slotSelectionChanged()));
+ QObject::connect(_ui.helpButton, SIGNAL(clicked()),
+ this, SLOT(slotHelpClicked()));
+
+ _ui.accountList->addAccounts(_banking->getAccounts());
+}
+
+
+KBMapAccount::~KBMapAccount(){
+}
+
+
+
+AB_ACCOUNT *KBMapAccount::getAccount(){
+ return _account;
+}
+
+
+
+void KBMapAccount::accept(){
+ if (_account)
+ QDialog::accept();
+}
+
+
+
+void KBMapAccount::slotSelectionChanged(){
+ std::list<AB_ACCOUNT*> al;
+ AB_ACCOUNT *a;
+
+ al=_ui.accountList->getSelectedAccounts();
+ if (al.empty()) {
+ _ui.assignButton->setEnabled(false);
+ _account=0;
+ return;
+ }
+ a=al.front();
+ if (AB_Account_GetUniqueId(a)!=0) {
+ _account=a;
+ _ui.assignButton->setEnabled(true);
+ }
+ else
+ _ui.assignButton->setEnabled(false);
+}
+
+
+
+void KBMapAccount::slotHelpClicked() {
+}
+
+
+
+
diff --git a/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h b/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h
new file mode 100644
index 0000000000000000000000000000000000000000..29c364d57f1452456826b7a58115f5b770421ee4
--- /dev/null
+++ b/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h
@@ -0,0 +1,52 @@
+/***************************************************************************
+ begin : Mon Mar 01 2004
+ copyright : (C) 2004 by Martin Preuss
+ email : martin@libchipcard.de
+
+ ***************************************************************************
+ * Please see toplevel file COPYING for license details *
+ ***************************************************************************/
+
+#ifndef QBANKING_MAPACCOUNT_H
+#define QBANKING_MAPACCOUNT_H
+
+#include "kbaccountlist.h"
+#include "ui_kbmapaccount.h"
+
+#include <aqbanking/account.h>
+
+
+class KBanking;
+
+
+class KBMapAccount: public QDialog {
+ Q_OBJECT
+public:
+ KBMapAccount(KBanking *kb,
+ const char *bankCode,
+ const char *accountId,
+ QWidget* parent=0,
+ Qt::WFlags fl=0);
+ ~KBMapAccount();
+
+ AB_ACCOUNT *getAccount();
+
+ void accept();
+
+protected slots:
+ void slotSelectionChanged();
+ void slotHelpClicked();
+
+private:
+ Ui_KBMapAccountUi _ui;
+ KBanking *_banking;
+ AB_ACCOUNT *_account;
+ KBAccountListView *_accountList;
+};
+
+
+
+
+
+#endif /* QBANKING_MAPACCOUNT_H */
+
diff --git a/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui b/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui
new file mode 100644
index 0000000000000000000000000000000000000000..d144f445b6cf0dd68bf76208facd6ad89a011b09
--- /dev/null
+++ b/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>KBMapAccountUi</class>
+ <widget class="QDialog" name="KBMapAccountUi">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>747</width>
+ <height>538</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Account Mapping</string>
+ </property>
+ <layout class="QVBoxLayout">
+ <item>
+ <widget class="QLabel" name="textLabel1">
+ <property name="text">
+ <string><qt>
+Please choose the <b>online</b> account you want the
+<b>application</b> account to be mapped to from the list below.
+</qt></string>
+ </property>
+ <property name="wordWrap">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="Q3GroupBox" name="groupBox1">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Application Account</string>
+ </property>
+ <layout class="QHBoxLayout">
+ <item>
+ <widget class="QLabel" name="textLabel2">
+ <property name="text">
+ <string>Bank Code</string>
+ </property>
+ <property name="wordWrap">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="bankCodeEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="textLabel2_2">
+ <property name="text">
+ <string>Account Number</string>
+ </property>
+ <property name="wordWrap">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="accountIdEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="Q3GroupBox" name="accountBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Online Accounts</string>
+ </property>
+ <layout class="QHBoxLayout">
+ <item>
+ <widget class="KBAccountListView" name="accountList" native="true"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout">
+ <item>
+ <widget class="QPushButton" name="helpButton">
+ <property name="text">
+ <string>Help</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="spacer1">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>326</width>
+ <height>29</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="assignButton">
+ <property name="text">
+ <string>Assign</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="abortButton">
+ <property name="text">
+ <string>Abort</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+ <customwidget>
+ <class>Q3GroupBox</class>
+ <extends>QGroupBox</extends>
+ <header>Qt3Support/Q3GroupBox</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>KBAccountListView</class>
+ <extends>QWidget</extends>
+ <header location="local">kbaccountlist.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>abortButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KBMapAccountUi</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>20</x>
+ <y>20</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>20</x>
+ <y>20</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>assignButton</sender>
+ <signal>clicked()</signal>
+ <receiver>KBMapAccountUi</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>20</x>
+ <y>20</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>20</x>
+ <y>20</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp b/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp
index e1c8cf48ea3d9e342151540127dbcc3e4b9e03df..7cdf10941e39a7e70dde5b73aa89a7e41c070862 100644
--- a/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp
+++ b/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp
@@ -25,7 +25,6 @@
// QBanking includes
#include "kbpickstartdate.h"
-#include <q4banking/qbanking.h>
// Gwenhywfar includes
#include <gwenhywfar/debug.h>
@@ -46,14 +45,12 @@
-KBPickStartDate::KBPickStartDate(QBanking *qb,
- const QDate &firstPossible,
+KBPickStartDate::KBPickStartDate(const QDate &firstPossible,
const QDate &lastUpdate,
const QString& accountName,
int defaultChoice,
QWidget* parent, bool modal) :
QDialog(parent),
- _banking(qb),
_firstPossible(firstPossible),
_lastUpdate(lastUpdate)
{
@@ -139,6 +136,5 @@ QDate KBPickStartDate::date()
void KBPickStartDate::slotHelpClicked()
{
- _banking->invokeHelp("KBPickStartDate", "none");
}
diff --git a/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h b/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h
index 428dee1ab28300955d1c1f687abff484f82c4d7d..36ea601601aac63f01c211b7a62dc5da805c3224 100644
--- a/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h
+++ b/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h
@@ -43,8 +43,7 @@ private:
const QDate &_firstPossible;
const QDate &_lastUpdate;
public:
- KBPickStartDate(QBanking *banking,
- const QDate &firstPossible,
+ KBPickStartDate(const QDate &firstPossible,
const QDate &lastUpdate,
const QString& accountName,
int defaultChoice,
diff --git a/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp b/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp
index 4454e88b68537caa56f1eb99b473e61dfa292595..b588797bd8d9a3f40dcb08abb3c2d92f7204de95 100644
--- a/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp
+++ b/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp
@@ -22,6 +22,9 @@
# include <config-kmymoney.h>
#endif
+
+#if 0
+
#include "kbsettings.h"
#include <gwenhywfar/debug.h>
@@ -56,3 +59,6 @@ int KBankingSettings::fini()
return -1;
return 0;
}
+
+#endif
+
diff --git a/kmymoney/plugins/kbanking/dialogs/kbsettings.h b/kmymoney/plugins/kbanking/dialogs/kbsettings.h
index fc4dc87fbd964ea6d9f1b330af880dbd82196a1f..c0db9244ff97b69af0eb52868cb87837f6476971 100644
--- a/kmymoney/plugins/kbanking/dialogs/kbsettings.h
+++ b/kmymoney/plugins/kbanking/dialogs/kbsettings.h
@@ -21,6 +21,8 @@
#ifndef KBANKING_KBSETTINGS_H
#define KBANKING_KBSETTINGS_H
+#if 0
+
#include "kbanking.h"
#include <q4banking/qbcfgtabsettings.h>
@@ -37,4 +39,7 @@ public:
int fini();
};
+
+#endif
+
#endif /* KBANKING_KBSETTINGS_H */
diff --git a/kmymoney/plugins/kbanking/kbanking.cpp b/kmymoney/plugins/kbanking/kbanking.cpp
index c18cd701fcc5285211386afa0c2156153e01d3f6..6730bd180a2feaf76c3ce7a53612e03b43f54b7d 100644
--- a/kmymoney/plugins/kbanking/kbanking.cpp
+++ b/kmymoney/plugins/kbanking/kbanking.cpp
@@ -24,6 +24,7 @@
#include "kbanking.h"
+#include "kbmapaccount.h"
#include <assert.h>
#include <QString>
@@ -33,12 +34,15 @@
#include <QDateTime>
#include <QWidget>
+#include <aqbanking/dlg_importer.h>
+
#include <gwenhywfar/debug.h>
#include <gwenhywfar/text.h>
+#include <gwenhywfar/gui.h>
KBanking::KBanking(const char *appname,
const char *cfgDir) :
- QBanking(appname, cfgDir),
+ AB_Banking(appname, cfgDir),
_jobQueue(0)
{
}
@@ -55,14 +59,14 @@ int KBanking::init()
{
int rv;
- rv = QBanking::init();
+ rv = AB_Banking::init();
if (rv < 0)
return rv;
rv = onlineInit();
if (rv) {
fprintf(stderr, "Error on online init (%d).\n", rv);
- QBanking::fini();
+ AB_Banking::fini();
return rv;
}
@@ -84,10 +88,10 @@ int KBanking::fini()
rv = onlineFini();
if (rv) {
- QBanking::fini();
+ AB_Banking::fini();
return rv;
}
- return QBanking::fini();
+ return AB_Banking::fini();
}
@@ -100,8 +104,11 @@ int KBanking::executeQueue(AB_IMEXPORTER_CONTEXT *ctx)
rv = AB_BANKING_QBANKING_EXECUTE_JOBS(_jobQueue, ctx);
oldQ = _jobQueue;
_jobQueue = AB_Job_List2_new();
- flagStaff()->queueUpdated();
AB_Job_List2_FreeAll(oldQ);
+
+ /* clear password DB */
+ GWEN_Gui_SetPasswordStatus(NULL, NULL, GWEN_Gui_PasswordStatus_Remove, 0);
+
return rv;
}
@@ -138,7 +145,6 @@ int KBanking::enqueueJob(AB_JOB *j)
assert(j);
AB_Job_Attach(j);
AB_Job_List2_PushBack(_jobQueue, j);
- flagStaff()->queueUpdated();
return 0;
}
@@ -149,13 +155,71 @@ int KBanking::dequeueJob(AB_JOB *j)
assert(_jobQueue);
AB_Job_List2_Remove(_jobQueue, j);
AB_Job_free(j);
- flagStaff()->queueUpdated();
return 0;
}
+bool KBanking::askMapAccount(const char *id,
+ const char *bankCode,
+ const char *accountId){
+ KBMapAccount *w;
+ w=new KBMapAccount(this, bankCode, accountId);
+ if (w->exec()==QDialog::Accepted) {
+ AB_ACCOUNT *a;
+
+ a=w->getAccount();
+ assert(a);
+ DBG_NOTICE(0,
+ "Mapping application account \"%s\" to "
+ "online account \"%s/%s\"",
+ id,
+ AB_Account_GetBankCode(a),
+ AB_Account_GetAccountNumber(a));
+ setAccountAlias(a, id);
+ delete w;
+ return true;
+ }
+
+ delete w;
+ return false;
+}
+
+
+
+bool KBanking::interactiveImport() {
+ AB_IMEXPORTER_CONTEXT *ctx;
+ GWEN_DIALOG *dlg;
+ int rv;
+
+ ctx=AB_ImExporterContext_new();
+ dlg=AB_ImporterDialog_new(getCInterface(), ctx, NULL);
+ if (dlg==NULL) {
+ DBG_ERROR(0, "Could not create importer dialog.");
+ AB_ImExporterContext_free(ctx);
+ return false;
+ }
+
+ rv=GWEN_Gui_ExecDialog(dlg, 0);
+ if (rv==0) {
+ DBG_ERROR(0, "Aborted by user");
+ GWEN_Dialog_free(dlg);
+ AB_ImExporterContext_free(ctx);
+ return false;
+ }
+
+ if (!importContext(ctx, 0)) {
+ DBG_ERROR(0, "Error on importContext");
+ GWEN_Dialog_free(dlg);
+ AB_ImExporterContext_free(ctx);
+ return false;
+ }
+
+ GWEN_Dialog_free(dlg);
+ AB_ImExporterContext_free(ctx);
+ return true;
+}
diff --git a/kmymoney/plugins/kbanking/kbanking.h b/kmymoney/plugins/kbanking/kbanking.h
index 2df2aed40750b514c3f8e2c79785e97b278cada8..330c16abbb73cb7f50b3dff46bbc443dd72211ca 100644
--- a/kmymoney/plugins/kbanking/kbanking.h
+++ b/kmymoney/plugins/kbanking/kbanking.h
@@ -23,7 +23,7 @@
#include <aqbanking/version.h>
#include <aqbanking/banking.h>
-#include <q4banking/qbanking.h>
+#include "banking.hpp"
#ifndef AQB_MAKE_VERSION
#define AQB_MAKE_VERSION(a,b,c,d) (((a)<<24) | ((b)<<16) | (c<<8) | (d))
@@ -39,13 +39,13 @@
#ifndef KBANKING_GUIID
#if AQB_IS_VERSION(4,99,0,0)
-# define AB_BANKING_QBANKING_EXECUTE_JOBS(a, b) QBanking::executeJobs(a, b)
+# define AB_BANKING_QBANKING_EXECUTE_JOBS(a, b) AB_Banking::executeJobs(a, b)
# define AB_BANKING_JOB_CHECKAVAILABILITY(a) AB_Job_CheckAvailability(a)
# define AB_BANKING_GETACCOUNTBYALIAS(a, b) AB_Banking_GetAccountByAlias(a, b)
#elif AQB_IS_VERSION(3,9,0,0)
# define onlineInit() onlineInit(0)
# define onlineFini() onlineFini(0)
-# define AB_BANKING_QBANKING_EXECUTE_JOBS(a, b) QBanking::executeJobs(a, b, 0)
+# define AB_BANKING_QBANKING_EXECUTE_JOBS(a, b) AB_Banking::executeJobs(a, b, 0)
# define AB_BANKING_GETACCOUNTBYALIAS(a, b) AB_Banking_GetAccountByAlias(a, b, 0)
# define AB_BANKING_JOB_CHECKAVAILABILITY(a) AB_Job_CheckAvailability(a, 0)
#else
@@ -57,7 +57,7 @@
#include <list>
-class KBanking: public QBanking
+class KBanking: public AB_Banking
{
private:
AB_JOB_LIST2 *_jobQueue;
@@ -76,6 +76,11 @@ public:
int dequeueJob(AB_JOB *j);
std::list<AB_JOB*> getEnqueuedJobs();
+ bool askMapAccount(const char *id,
+ const char *bankCode,
+ const char *accountId);
+
+ virtual bool interactiveImport();
};
diff --git a/kmymoney/plugins/kbanking/mymoneybanking.cpp b/kmymoney/plugins/kbanking/mymoneybanking.cpp
index 9e9c97bfeda3afc066c6bdde562220df6332f15d..ab8569093191821a9c7099e153d5371362f6ca9e 100644
--- a/kmymoney/plugins/kbanking/mymoneybanking.cpp
+++ b/kmymoney/plugins/kbanking/mymoneybanking.cpp
@@ -59,9 +59,11 @@
#include <aqbanking/jobgettransactions.h>
#include <aqbanking/jobgetbalance.h>
#include <aqbanking/job.h>
-#include <q4banking/qbgui.h>
+#include <aqbanking/abgui.h>
+#include <aqbanking/dlg_setup.h>
#include <gwenhywfar/logger.h>
#include <gwenhywfar/debug.h>
+#include <gwen-gui-qt4/qt4_gui.hpp>
// ----------------------------------------------------------------------------
// Project Includes
@@ -123,7 +125,7 @@ KBankingPlugin::KBankingPlugin(QObject *parent, const QStringList&) :
m_kbanking = new KMyMoneyBanking(this, "KMyMoney");
if (m_kbanking) {
- QBGui *gui;
+ QT4_Gui *gui;
#if AQB_IS_VERSION(4,99,0,0)
if (AB_Banking_HasConf4(m_kbanking->getCInterface())) {
@@ -155,17 +157,19 @@ KBankingPlugin::KBankingPlugin(QObject *parent, const QStringList&) :
}
#endif
- gui = new QBGui(m_kbanking);
+ gui = new QT4_Gui();
GWEN_Gui_SetGui(gui->getCInterface());
GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info);
GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Debug);
- m_kbanking->setGui(gui);
if (m_kbanking->init() == 0) {
// Tell the host application to load my GUI component
setComponentData(KGenericFactory<KBankingPlugin>::componentData());
setXMLFile("kmm_kbanking.rc");
qDebug("KMyMoney kbanking plugin loaded");
+ // get certificate handling and dialog settings management
+ AB_Gui_Extend(gui->getCInterface(), m_kbanking->getCInterface());
+
// create view
createJobView();
@@ -298,15 +302,24 @@ void KBankingPlugin::createActions(void)
void KBankingPlugin::slotSettings(void)
{
- QPointer<KBankingSettings> bs = new KBankingSettings(m_kbanking);
- if (bs->init())
- qWarning("Error on ini of settings dialog.");
- else {
- bs->exec();
- if (bs && bs->fini())
- qWarning("Error on fini of settings dialog.");
+ if (m_kbanking) {
+ GWEN_DIALOG *dlg;
+ int rv;
+
+ dlg=AB_SetupDialog_new(m_kbanking->getCInterface());
+ if (dlg==NULL) {
+ DBG_ERROR(0, "Could not create setup dialog.");
+ return;
+ }
+
+ rv=GWEN_Gui_ExecDialog(dlg, 0);
+ if (rv==0) {
+ DBG_ERROR(0, "Aborted by user");
+ GWEN_Dialog_free(dlg);
+ return;
+ }
+ GWEN_Dialog_free(dlg);
}
- delete bs;
}
bool KBankingPlugin::mapAccount(const MyMoneyAccount& acc, MyMoneyKeyValueContainer& settings)
@@ -506,8 +519,8 @@ bool KBankingPlugin::updateAccount(const MyMoneyAccount& acc, bool moreAccounts)
// and the qd is invalid
if (dateOption == 0
|| (dateOption > 1 && !qd.isValid())) {
- QPointer<KBPickStartDate> psd = new KBPickStartDate(m_kbanking, qd, lastUpdate, acc.name(),
- lastUpdate.isValid() ? 2 : 3, 0, true);
+ QPointer<KBPickStartDate> psd = new KBPickStartDate(qd, lastUpdate, acc.name(),
+ lastUpdate.isValid() ? 2 : 3, 0, true);
if (psd->exec() != QDialog::Accepted) {
AB_Job_free(job);
delete psd;
@@ -607,9 +620,6 @@ bool KBankingPlugin::updateAccount(const MyMoneyAccount& acc, bool moreAccounts)
DBG_ERROR(0, "Error: %d", rv);
}
AB_ImExporterContext_free(ctx);
-
- // let application emit signals to inform views
- m_kbanking->accountsUpdated();
}
rc = true;
}
diff --git a/kmymoney/plugins/kbanking/views/kbjobview.cpp b/kmymoney/plugins/kbanking/views/kbjobview.cpp
index 39b6f52e6b97efa865aec91ce8b8536564178e87..2fa004b29493f5365b09b06e291f8c0bc768f4ca 100644
--- a/kmymoney/plugins/kbanking/views/kbjobview.cpp
+++ b/kmymoney/plugins/kbanking/views/kbjobview.cpp
@@ -64,8 +64,6 @@ KBJobView::KBJobView(KBanking *kb,
m_jobList = new KBJobListView(jobBox);
jobBoxLayout->addWidget(m_jobList);
- QObject::connect(m_app->flagStaff(), SIGNAL(signalQueueUpdated()),
- this, SLOT(slotQueueUpdated()));
QObject::connect(executeButton, SIGNAL(clicked()),
this, SLOT(slotExecute()));
QObject::connect(dequeueButton, SIGNAL(clicked()),
@@ -154,9 +152,6 @@ void KBJobView::slotExecute()
DBG_ERROR(0, "Error: %d", rv);
}
AB_ImExporterContext_free(ctx);
-
- // let App emit signals to inform account views
- m_app->accountsUpdated();
}
diff --git a/kmymoney/plugins/kbanking/widgets/CMakeLists.txt b/kmymoney/plugins/kbanking/widgets/CMakeLists.txt
index cbc75c2fd8910835e324940009c4b72dc2f87cfb..2e0ba792c670bc32fd8c661cea9bc5f352bc4f9e 100644
--- a/kmymoney/plugins/kbanking/widgets/CMakeLists.txt
+++ b/kmymoney/plugins/kbanking/widgets/CMakeLists.txt
@@ -2,6 +2,7 @@
########### next target ###############
SET(kmm_kbanking_widgets_la_SOURCES
+ kbaccountlist.cpp
kbjoblist.cpp
)
diff --git a/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp b/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..53e1f4cc383dc6a738bf0d65a8859d317b23640f
--- /dev/null
+++ b/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp
@@ -0,0 +1,226 @@
+/***************************************************************************
+ begin : Mon Mar 01 2004
+ copyright : (C) 2004 by Martin Preuss
+ email : martin@libchipcard.de
+
+ ***************************************************************************
+ * Please see toplevel file COPYING for license details *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config-kmymoney.h>
+#endif
+
+
+#include "kbaccountlist.h"
+#include <assert.h>
+#include <QtCore/qstring.h>
+
+
+
+KBAccountListViewItem::KBAccountListViewItem(KBAccountListView *parent,
+ AB_ACCOUNT *acc)
+:K3ListViewItem(parent)
+,_account(acc){
+ assert(acc);
+ _populate();
+}
+
+
+
+KBAccountListViewItem::KBAccountListViewItem(const KBAccountListViewItem &item)
+:K3ListViewItem(item)
+,_account(0){
+
+ if (item._account) {
+ _account=item._account;
+ }
+}
+
+
+KBAccountListViewItem::KBAccountListViewItem(KBAccountListView *parent,
+ K3ListViewItem *after,
+ AB_ACCOUNT *acc)
+:K3ListViewItem(parent, after)
+,_account(acc){
+ assert(acc);
+ _populate();
+}
+
+
+
+KBAccountListViewItem::~KBAccountListViewItem(){
+}
+
+
+
+AB_ACCOUNT *KBAccountListViewItem::getAccount(){
+ return _account;
+}
+
+
+void KBAccountListViewItem::_populate() {
+ QString tmp;
+ int i;
+
+ assert(_account);
+
+ i=0;
+
+ // unique id
+ setText(i++, QString::number(AB_Account_GetUniqueId(_account)));
+
+ // bank code
+ setText(i++, QString::fromUtf8(AB_Account_GetBankCode(_account)));
+
+ // bank name
+ tmp=AB_Account_GetBankName(_account);
+ if (tmp.isEmpty())
+ tmp="(unnamed)";
+ setText(i++,tmp);
+
+ // account id
+ setText(i++, QString::fromUtf8(AB_Account_GetAccountNumber(_account)));
+
+ // account name
+ tmp=QString::fromUtf8(AB_Account_GetAccountName(_account));
+ if (tmp.isEmpty())
+ tmp="(unnamed)";
+ setText(i++, tmp);
+
+ tmp=QString::fromUtf8(AB_Account_GetOwnerName(_account));
+ if (tmp.isEmpty())
+ tmp="";
+ setText(i++, tmp);
+
+ tmp=QString::fromUtf8(AB_Provider_GetName(AB_Account_GetProvider(_account)));
+ if (tmp.isEmpty())
+ tmp="(unknown)";
+ setText(i++, tmp);
+
+}
+
+
+
+QString KBAccountListViewItem::key(int column, bool) const {
+ QString result;
+
+ if (column==0) {
+ ulong i;
+ bool ok;
+
+ // id
+ i=text(column).toULong(&ok);
+ if (ok) {
+ char numbuf[32];
+
+ snprintf(numbuf, sizeof(numbuf), "%012lu", i);
+ result=QString(numbuf);
+ }
+ else
+ result=text(column);
+ }
+ else
+ result=text(column);
+
+ return result;
+}
+
+
+
+
+
+
+
+
+
+KBAccountListView::KBAccountListView(QWidget *parent)
+:K3ListView(parent){
+ setAllColumnsShowFocus(true);
+ setShowSortIndicator(true);
+ addColumn(QWidget::tr("Id"),-1);
+ addColumn(QWidget::tr("Institute Code"),-1);
+ addColumn(QWidget::tr("Institute Name"),-1);
+ addColumn(QWidget::tr("Account Number"),-1);
+ addColumn(QWidget::tr("Account Name"),-1);
+ addColumn(QWidget::tr("Owner"),-1);
+ addColumn(QWidget::tr("Backend"),-1);
+}
+
+
+
+KBAccountListView::~KBAccountListView(){
+}
+
+
+
+void KBAccountListView::addAccount(AB_ACCOUNT *acc){
+ KBAccountListViewItem *entry;
+
+ entry=new KBAccountListViewItem(this, acc);
+}
+
+
+
+void KBAccountListView::addAccounts(const std::list<AB_ACCOUNT*> &accs){
+ std::list<AB_ACCOUNT*>::const_iterator it;
+
+ for (it=accs.begin(); it!=accs.end(); it++) {
+ KBAccountListViewItem *entry;
+
+ entry=new KBAccountListViewItem(this, *it);
+ } /* for */
+}
+
+
+
+AB_ACCOUNT *KBAccountListView::getCurrentAccount() {
+ KBAccountListViewItem *entry;
+
+ entry=dynamic_cast<KBAccountListViewItem*>(currentItem());
+ if (!entry) {
+ return 0;
+ }
+ return entry->getAccount();
+}
+
+
+
+std::list<AB_ACCOUNT*> KBAccountListView::getSelectedAccounts(){
+ std::list<AB_ACCOUNT*> accs;
+ KBAccountListViewItem *entry;
+
+ // Create an iterator and give the listview as argument
+ Q3ListViewItemIterator it(this);
+ // iterate through all items of the listview
+ for (;it.current();++it) {
+ if (it.current()->isSelected()) {
+ entry=dynamic_cast<KBAccountListViewItem*>(it.current());
+ if (entry)
+ accs.push_back(entry->getAccount());
+ }
+ } // for
+
+ return accs;
+}
+
+
+
+std::list<AB_ACCOUNT*> KBAccountListView::getSortedAccounts() {
+ std::list<AB_ACCOUNT*> accs;
+ KBAccountListViewItem *entry;
+
+ // Create an iterator and give the listview as argument
+ Q3ListViewItemIterator it(this);
+ // iterate through all items of the listview
+ for (;it.current();++it) {
+ entry=dynamic_cast<KBAccountListViewItem*>(it.current());
+ if (entry)
+ accs.push_back(entry->getAccount());
+ } // for
+
+ return accs;
+}
+
+
+
diff --git a/kmymoney/plugins/kbanking/widgets/kbaccountlist.h b/kmymoney/plugins/kbanking/widgets/kbaccountlist.h
new file mode 100644
index 0000000000000000000000000000000000000000..91c72b83bccd4e9ca753760b9301770052759356
--- /dev/null
+++ b/kmymoney/plugins/kbanking/widgets/kbaccountlist.h
@@ -0,0 +1,67 @@
+/***************************************************************************
+ begin : Mon Mar 01 2004
+ copyright : (C) 2004 by Martin Preuss
+ email : martin@libchipcard.de
+
+ ***************************************************************************
+ * Please see toplevel file COPYING for license details *
+ ***************************************************************************/
+
+#ifndef Q4BANKING_ACCOUNTLIST_H
+#define Q4BANKING_ACCOUNTLIST_H
+
+
+#include <k3listview.h>
+#include <aqbanking/account.h>
+
+#include <list>
+
+class KBAccountListView;
+class KBAccountListViewItem;
+
+
+class KBAccountListViewItem: public K3ListViewItem {
+private:
+ AB_ACCOUNT *_account;
+
+ void _populate();
+
+public:
+ KBAccountListViewItem(KBAccountListView *parent, AB_ACCOUNT *acc);
+ KBAccountListViewItem(KBAccountListView *parent,
+ K3ListViewItem *after,
+ AB_ACCOUNT *acc);
+ KBAccountListViewItem(const KBAccountListViewItem &item);
+
+ virtual ~KBAccountListViewItem();
+
+ AB_ACCOUNT *getAccount();
+
+ QString key(int column, bool ascending) const;
+};
+
+
+
+class KBAccountListView: public K3ListView {
+private:
+public:
+ KBAccountListView(QWidget *parent=0);
+ virtual ~KBAccountListView();
+
+ void addAccount(AB_ACCOUNT *acc);
+ void addAccounts(const std::list<AB_ACCOUNT*> &accs);
+
+ AB_ACCOUNT *getCurrentAccount();
+ std::list<AB_ACCOUNT*> getSelectedAccounts();
+
+ std::list<AB_ACCOUNT*> getSortedAccounts();
+
+};
+
+
+
+
+#endif /* QBANKING_ACCOUNTLIST_H */
+
+
+