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:
Christian Stimming 2003-10-21 18:01:53 +00:00
parent fee30d10b3
commit 08b12ed028
5 changed files with 277 additions and 243 deletions

View File

@ -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,

View File

@ -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 *

View File

@ -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;
}
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;
}

View File

@ -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

View File

@ -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
*/