mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
2003-10-21 Christian Stimming <stimming@tuhh.de>
* src/import-export/hbci/gnc-hbci-utils.c: Refactor some GUI code. Improve user messages. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@9615 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
fee30d10b3
commit
08b12ed028
@ -1,3 +1,8 @@
|
||||
2003-10-21 Christian Stimming <stimming@tuhh.de>
|
||||
|
||||
* src/import-export/hbci/gnc-hbci-utils.c: Refactor some GUI
|
||||
code. Improve user messages.
|
||||
|
||||
2003-10-20 Christian Stimming <stimming@tuhh.de>
|
||||
|
||||
* src/import-export/hbci/hbci-interaction.c,
|
||||
|
@ -348,226 +348,6 @@ to_hexstring_hash (const char *str)
|
||||
|
||||
|
||||
|
||||
static const HBCI_Bank *
|
||||
choose_one_bank (gncUIWidget parent, const list_HBCI_Bank *banklist)
|
||||
{
|
||||
const HBCI_Bank *bank;
|
||||
list_HBCI_Bank_iter *iter, *end;
|
||||
int list_size;
|
||||
g_assert (parent);
|
||||
g_assert (banklist);
|
||||
|
||||
/*printf("%d banks found.\n", list_HBCI_Bank_size (banklist));*/
|
||||
list_size = list_HBCI_Bank_size (banklist);
|
||||
if (list_size == 0)
|
||||
return NULL;
|
||||
|
||||
if (list_size == 1)
|
||||
{
|
||||
/* Get bank. */
|
||||
iter = list_HBCI_Bank_begin (banklist);
|
||||
bank = list_HBCI_Bank_iter_get (iter);
|
||||
list_HBCI_Bank_iter_delete (iter);
|
||||
return bank;
|
||||
}
|
||||
|
||||
/* More than one bank available. */
|
||||
{
|
||||
int choice, i;
|
||||
GList *node;
|
||||
GList *radio_list = NULL;
|
||||
|
||||
end = list_HBCI_Bank_end (banklist);
|
||||
for (iter = list_HBCI_Bank_begin (banklist);
|
||||
!list_HBCI_Bank_iter_equal(iter, end);
|
||||
list_HBCI_Bank_iter_next(iter))
|
||||
{
|
||||
bank = list_HBCI_Bank_iter_get (iter);
|
||||
radio_list = g_list_append(radio_list,
|
||||
g_strdup_printf ("%s (%s)",
|
||||
HBCI_Bank_name (bank),
|
||||
HBCI_Bank_bankCode (bank)));
|
||||
}
|
||||
list_HBCI_Bank_iter_delete (iter);
|
||||
|
||||
choice = gnc_choose_radio_option_dialog
|
||||
(parent,
|
||||
_("Choose HBCI bank"),
|
||||
_("More than one HBCI bank is available for \n"
|
||||
"the requested operation. Please choose \n"
|
||||
"the one that should be used."),
|
||||
0,
|
||||
radio_list);
|
||||
|
||||
for (node = radio_list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
g_list_free (radio_list);
|
||||
|
||||
i = 0;
|
||||
for (iter = list_HBCI_Bank_begin (banklist);
|
||||
!list_HBCI_Bank_iter_equal(iter, end);
|
||||
list_HBCI_Bank_iter_next(iter))
|
||||
if (i == choice)
|
||||
{
|
||||
bank = list_HBCI_Bank_iter_get (iter);
|
||||
list_HBCI_Bank_iter_delete (iter);
|
||||
list_HBCI_Bank_iter_delete (end);
|
||||
return bank;
|
||||
}
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const HBCI_Customer *
|
||||
choose_one_customer (gncUIWidget parent, const list_HBCI_Customer *custlist)
|
||||
{
|
||||
const HBCI_Customer *customer;
|
||||
list_HBCI_Customer_iter *iter, *end;
|
||||
g_assert(parent);
|
||||
g_assert(custlist);
|
||||
|
||||
if (list_HBCI_Customer_size (custlist) == 0) {
|
||||
printf ("choose_one_customer: oops, no customer found.\n");
|
||||
return NULL;
|
||||
}
|
||||
if (list_HBCI_Customer_size (custlist) == 1)
|
||||
{
|
||||
/* Get one customer */
|
||||
iter = list_HBCI_Customer_begin (custlist);
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
|
||||
return customer;
|
||||
}
|
||||
|
||||
/* More than one customer available. */
|
||||
{
|
||||
int choice, i;
|
||||
GList *node;
|
||||
GList *radio_list = NULL;
|
||||
|
||||
end = list_HBCI_Customer_end (custlist);
|
||||
for (iter = list_HBCI_Customer_begin (custlist);
|
||||
!list_HBCI_Customer_iter_equal(iter, end);
|
||||
list_HBCI_Customer_iter_next(iter))
|
||||
{
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
radio_list =
|
||||
g_list_append(radio_list,
|
||||
g_strdup_printf ("%s (%s)",
|
||||
HBCI_Customer_custName (customer),
|
||||
HBCI_Customer_custId (customer)));
|
||||
}
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
|
||||
choice = gnc_choose_radio_option_dialog
|
||||
(parent,
|
||||
_("Choose HBCI customer"),
|
||||
_("More than one HBCI customer is available for \n"
|
||||
"the requested operation. Please choose \n"
|
||||
"the one that should be used."),
|
||||
0,
|
||||
radio_list);
|
||||
|
||||
for (node = radio_list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
g_list_free (radio_list);
|
||||
|
||||
i = 0;
|
||||
for (iter = list_HBCI_Customer_begin (custlist);
|
||||
!list_HBCI_Customer_iter_equal(iter, end);
|
||||
list_HBCI_Customer_iter_next(iter))
|
||||
if (i == choice)
|
||||
{
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
list_HBCI_Customer_iter_delete (end);
|
||||
return customer;
|
||||
}
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const HBCI_User *
|
||||
choose_one_user (gncUIWidget parent, const list_HBCI_User *userlist)
|
||||
{
|
||||
const HBCI_User *user;
|
||||
list_HBCI_User_iter *iter, *end;
|
||||
g_assert(parent);
|
||||
g_assert(userlist);
|
||||
|
||||
if (list_HBCI_User_size (userlist) == 0) {
|
||||
printf("choose_one_user: oops, no user found.\n");
|
||||
return NULL;
|
||||
}
|
||||
if (list_HBCI_User_size (userlist) == 1)
|
||||
{
|
||||
/* Get one User */
|
||||
iter = list_HBCI_User_begin (userlist);
|
||||
user = list_HBCI_User_iter_get (iter);
|
||||
list_HBCI_User_iter_delete (iter);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
/* More than one user available. */
|
||||
{
|
||||
int choice, i;
|
||||
GList *node;
|
||||
GList *radio_list = NULL;
|
||||
|
||||
end = list_HBCI_User_end (userlist);
|
||||
for (iter = list_HBCI_User_begin (userlist);
|
||||
!list_HBCI_User_iter_equal(iter, end);
|
||||
list_HBCI_User_iter_next(iter))
|
||||
{
|
||||
user = list_HBCI_User_iter_get (iter);
|
||||
radio_list = g_list_append(radio_list,
|
||||
g_strdup_printf ("%s (%s)",
|
||||
HBCI_User_userName (user),
|
||||
HBCI_User_userId (user)));
|
||||
}
|
||||
list_HBCI_User_iter_delete (iter);
|
||||
|
||||
choice = gnc_choose_radio_option_dialog
|
||||
(parent,
|
||||
_("Choose HBCI user"),
|
||||
_("More than one HBCI user is available for \n"
|
||||
"the requested operation. Please choose \n"
|
||||
"the one that should be used."),
|
||||
0,
|
||||
radio_list);
|
||||
|
||||
for (node = radio_list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
g_list_free (radio_list);
|
||||
|
||||
i = 0;
|
||||
for (iter = list_HBCI_User_begin (userlist);
|
||||
!list_HBCI_User_iter_equal(iter, end);
|
||||
list_HBCI_User_iter_next(iter))
|
||||
if (i == choice)
|
||||
{
|
||||
user = list_HBCI_User_iter_get (iter);
|
||||
list_HBCI_User_iter_delete (iter);
|
||||
list_HBCI_User_iter_delete (end);
|
||||
return user;
|
||||
}
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static const HBCI_Customer *
|
||||
|
@ -545,24 +545,247 @@ gnc_hbci_get_first_customer(const HBCI_Account *h_acc)
|
||||
{
|
||||
/* Get one customer. */
|
||||
const list_HBCI_Customer *custlist;
|
||||
list_HBCI_Customer_iter *iter;
|
||||
const HBCI_Customer *customer;
|
||||
|
||||
custlist = HBCI_Account_authorizedCustomers (h_acc);
|
||||
g_assert (custlist);
|
||||
switch (list_HBCI_Customer_size (custlist)) {
|
||||
case 0:
|
||||
printf("gnc_hbci_get_first_customer: No HBCI customer found.\n");
|
||||
return choose_one_customer(gnc_ui_get_toplevel (), custlist);
|
||||
}
|
||||
|
||||
const char *bank_to_str (const HBCI_Bank *bank)
|
||||
{
|
||||
g_assert (bank);
|
||||
return ((strlen(HBCI_Bank_name (bank)) > 0) ?
|
||||
HBCI_Bank_name (bank) :
|
||||
HBCI_Bank_bankCode(bank));
|
||||
}
|
||||
|
||||
|
||||
const HBCI_Bank *
|
||||
choose_one_bank (gncUIWidget parent, const list_HBCI_Bank *banklist)
|
||||
{
|
||||
const HBCI_Bank *bank;
|
||||
list_HBCI_Bank_iter *iter, *end;
|
||||
int list_size;
|
||||
g_assert (parent);
|
||||
g_assert (banklist);
|
||||
|
||||
/*printf("%d banks found.\n", list_HBCI_Bank_size (banklist));*/
|
||||
list_size = list_HBCI_Bank_size (banklist);
|
||||
if (list_size == 0)
|
||||
return NULL;
|
||||
case 1:
|
||||
break;
|
||||
default:
|
||||
gnc_warning_dialog(gnc_ui_get_toplevel (),
|
||||
"Sorry, Choosing one out of several HBCI Customers not yet implemented.");
|
||||
|
||||
if (list_size == 1)
|
||||
{
|
||||
/* Get bank. */
|
||||
iter = list_HBCI_Bank_begin (banklist);
|
||||
bank = list_HBCI_Bank_iter_get (iter);
|
||||
list_HBCI_Bank_iter_delete (iter);
|
||||
return bank;
|
||||
}
|
||||
|
||||
/* More than one bank available. */
|
||||
{
|
||||
int choice, i;
|
||||
GList *node;
|
||||
GList *radio_list = NULL;
|
||||
|
||||
end = list_HBCI_Bank_end (banklist);
|
||||
for (iter = list_HBCI_Bank_begin (banklist);
|
||||
!list_HBCI_Bank_iter_equal(iter, end);
|
||||
list_HBCI_Bank_iter_next(iter))
|
||||
{
|
||||
bank = list_HBCI_Bank_iter_get (iter);
|
||||
radio_list = g_list_append(radio_list,
|
||||
g_strdup_printf ("%s (%s)",
|
||||
HBCI_Bank_name (bank),
|
||||
HBCI_Bank_bankCode (bank)));
|
||||
}
|
||||
list_HBCI_Bank_iter_delete (iter);
|
||||
|
||||
choice = gnc_choose_radio_option_dialog
|
||||
(parent,
|
||||
_("Choose HBCI bank"),
|
||||
_("More than one HBCI bank is available for \n"
|
||||
"the requested operation. Please choose \n"
|
||||
"the one that should be used."),
|
||||
0,
|
||||
radio_list);
|
||||
|
||||
for (node = radio_list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
g_list_free (radio_list);
|
||||
|
||||
i = 0;
|
||||
for (iter = list_HBCI_Bank_begin (banklist);
|
||||
!list_HBCI_Bank_iter_equal(iter, end);
|
||||
list_HBCI_Bank_iter_next(iter))
|
||||
if (i == choice)
|
||||
{
|
||||
bank = list_HBCI_Bank_iter_get (iter);
|
||||
list_HBCI_Bank_iter_delete (iter);
|
||||
list_HBCI_Bank_iter_delete (end);
|
||||
return bank;
|
||||
}
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const HBCI_Customer *
|
||||
choose_one_customer (gncUIWidget parent, const list_HBCI_Customer *custlist)
|
||||
{
|
||||
const HBCI_Customer *customer;
|
||||
list_HBCI_Customer_iter *iter, *end;
|
||||
g_assert(parent);
|
||||
g_assert(custlist);
|
||||
|
||||
if (list_HBCI_Customer_size (custlist) == 0) {
|
||||
printf ("choose_one_customer: oops, no customer found.\n");
|
||||
return NULL;
|
||||
}
|
||||
iter = list_HBCI_Customer_begin (custlist);
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
return customer;
|
||||
if (list_HBCI_Customer_size (custlist) == 1)
|
||||
{
|
||||
/* Get one customer */
|
||||
iter = list_HBCI_Customer_begin (custlist);
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
|
||||
return customer;
|
||||
}
|
||||
|
||||
/* More than one customer available. */
|
||||
{
|
||||
int choice, i;
|
||||
GList *node;
|
||||
GList *radio_list = NULL;
|
||||
|
||||
end = list_HBCI_Customer_end (custlist);
|
||||
for (iter = list_HBCI_Customer_begin (custlist);
|
||||
!list_HBCI_Customer_iter_equal(iter, end);
|
||||
list_HBCI_Customer_iter_next(iter))
|
||||
{
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
radio_list =
|
||||
g_list_append(radio_list,
|
||||
/* Translators: %s is the name of the
|
||||
* customer. %s is the id of the customer. %s
|
||||
* is the name of the bank. %s is the bank
|
||||
* code. */
|
||||
g_strdup_printf (_("%s (%s) at bank %s (%s)"),
|
||||
HBCI_Customer_custName (customer),
|
||||
HBCI_Customer_custId (customer),
|
||||
bank_to_str (HBCI_User_bank(HBCI_Customer_user(customer))),
|
||||
HBCI_Bank_bankCode (HBCI_User_bank(HBCI_Customer_user(customer)))));
|
||||
}
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
|
||||
choice = gnc_choose_radio_option_dialog
|
||||
(parent,
|
||||
_("Choose HBCI customer"),
|
||||
_("More than one HBCI customer is available for \n"
|
||||
"the requested operation. Please choose \n"
|
||||
"the one that should be used."),
|
||||
0,
|
||||
radio_list);
|
||||
|
||||
for (node = radio_list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
g_list_free (radio_list);
|
||||
|
||||
i = 0;
|
||||
for (iter = list_HBCI_Customer_begin (custlist);
|
||||
!list_HBCI_Customer_iter_equal(iter, end);
|
||||
list_HBCI_Customer_iter_next(iter))
|
||||
if (i == choice)
|
||||
{
|
||||
customer = list_HBCI_Customer_iter_get (iter);
|
||||
list_HBCI_Customer_iter_delete (iter);
|
||||
list_HBCI_Customer_iter_delete (end);
|
||||
return customer;
|
||||
}
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const HBCI_User *
|
||||
choose_one_user (gncUIWidget parent, const list_HBCI_User *userlist)
|
||||
{
|
||||
const HBCI_User *user;
|
||||
list_HBCI_User_iter *iter, *end;
|
||||
g_assert(parent);
|
||||
g_assert(userlist);
|
||||
|
||||
if (list_HBCI_User_size (userlist) == 0) {
|
||||
printf("choose_one_user: oops, no user found.\n");
|
||||
return NULL;
|
||||
}
|
||||
if (list_HBCI_User_size (userlist) == 1)
|
||||
{
|
||||
/* Get one User */
|
||||
iter = list_HBCI_User_begin (userlist);
|
||||
user = list_HBCI_User_iter_get (iter);
|
||||
list_HBCI_User_iter_delete (iter);
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
/* More than one user available. */
|
||||
{
|
||||
int choice, i;
|
||||
GList *node;
|
||||
GList *radio_list = NULL;
|
||||
|
||||
end = list_HBCI_User_end (userlist);
|
||||
for (iter = list_HBCI_User_begin (userlist);
|
||||
!list_HBCI_User_iter_equal(iter, end);
|
||||
list_HBCI_User_iter_next(iter))
|
||||
{
|
||||
user = list_HBCI_User_iter_get (iter);
|
||||
radio_list = g_list_append
|
||||
(radio_list,
|
||||
g_strdup_printf (_("%s (%s) at bank %s (%s)"),
|
||||
HBCI_User_userName (user),
|
||||
HBCI_User_userId (user),
|
||||
bank_to_str (HBCI_User_bank(user)),
|
||||
HBCI_Bank_bankCode (HBCI_User_bank(user))));
|
||||
}
|
||||
list_HBCI_User_iter_delete (iter);
|
||||
|
||||
choice = gnc_choose_radio_option_dialog
|
||||
(parent,
|
||||
_("Choose HBCI user"),
|
||||
_("More than one HBCI user is available for \n"
|
||||
"the requested operation. Please choose \n"
|
||||
"the one that should be used."),
|
||||
0,
|
||||
radio_list);
|
||||
|
||||
for (node = radio_list; node; node = node->next)
|
||||
g_free (node->data);
|
||||
g_list_free (radio_list);
|
||||
|
||||
i = 0;
|
||||
for (iter = list_HBCI_User_begin (userlist);
|
||||
!list_HBCI_User_iter_equal(iter, end);
|
||||
list_HBCI_User_iter_next(iter))
|
||||
if (i == choice)
|
||||
{
|
||||
user = list_HBCI_User_iter_get (iter);
|
||||
list_HBCI_User_iter_delete (iter);
|
||||
list_HBCI_User_iter_delete (end);
|
||||
return user;
|
||||
}
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
g_assert_not_reached();
|
||||
return NULL;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <gnome.h>
|
||||
#include <openhbci/account.h>
|
||||
#include <openhbci/api.h>
|
||||
#include "gnc-ui.h"
|
||||
#include "Account.h"
|
||||
#include "Transaction.h"
|
||||
#include "gnc-book.h"
|
||||
@ -123,5 +124,38 @@ char *gnc_hbci_memo_tognc (const HBCI_Transaction *h_trans);
|
||||
const HBCI_Customer *
|
||||
gnc_hbci_get_first_customer(const HBCI_Account *h_acc);
|
||||
|
||||
/** Returns the name of this bank. This function is helpful because it
|
||||
* always makes sure to return a valid const char pointer, even if no
|
||||
* bankName is available. */
|
||||
const char *bank_to_str (const HBCI_Bank *bank);
|
||||
|
||||
/** Chooses one bank out of the given list.
|
||||
*
|
||||
* If the list has more than one bank, this displays a multichoice
|
||||
* dialog so that the user can choose one bank. If the list has only
|
||||
* one bank, it returns it. If the list has zero banks, it returns
|
||||
* NULL. */
|
||||
const HBCI_Bank *
|
||||
choose_one_bank (gncUIWidget parent, const list_HBCI_Bank *banklist);
|
||||
|
||||
/** Chooses one customer out of the given list.
|
||||
*
|
||||
* If the list has more than one customer, this displays a multichoice
|
||||
* dialog so that the user can choose one customer. If the list has only
|
||||
* one customer, it returns it. If the list has zero customers, it returns
|
||||
* NULL. */
|
||||
const HBCI_Customer *
|
||||
choose_one_customer (gncUIWidget parent, const list_HBCI_Customer *custlist);
|
||||
|
||||
/** Chooses one user out of the given list.
|
||||
*
|
||||
* If the list has more than one user, this displays a multichoice
|
||||
* dialog so that the user can choose one user. If the list has only
|
||||
* one user, it returns it. If the list has zero users, it returns
|
||||
* NULL. */
|
||||
const HBCI_User *
|
||||
choose_one_user (gncUIWidget parent, const list_HBCI_User *userlist);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "global-options.h"
|
||||
|
||||
#include "dialog-pass.h"
|
||||
#include "gnc-hbci-utils.h"
|
||||
|
||||
#include <openhbci.h>
|
||||
|
||||
@ -145,15 +146,6 @@ void GNCInteractor_reparent (GNCInteractor *i, GtkWidget *new_parent)
|
||||
}
|
||||
}
|
||||
|
||||
/* Helper functions */
|
||||
static const char *bank_to_str (const HBCI_Bank *bank)
|
||||
{
|
||||
g_assert (bank);
|
||||
return ((strlen(HBCI_Bank_name (bank)) > 0) ?
|
||||
HBCI_Bank_name (bank) :
|
||||
HBCI_Bank_bankCode(bank));
|
||||
}
|
||||
|
||||
/********************************************************
|
||||
* Now all the callback functions
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user