mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Allow new accounts to be created from names typed in the register.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3212 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
76adadd9e5
commit
e2f274b190
@ -106,6 +106,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "Account.h"
|
#include "Account.h"
|
||||||
|
#include "AccWindow.h"
|
||||||
#include "FileDialog.h"
|
#include "FileDialog.h"
|
||||||
#include "MultiLedger.h"
|
#include "MultiLedger.h"
|
||||||
#include "Refresh.h"
|
#include "Refresh.h"
|
||||||
@ -1146,7 +1147,7 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir,
|
|||||||
* of the new cell will be.
|
* of the new cell will be.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
LedgerTraverse (Table *table,
|
LedgerTraverse (Table *table,
|
||||||
VirtualLocation *p_new_virt_loc,
|
VirtualLocation *p_new_virt_loc,
|
||||||
gncTableTraversalDir dir)
|
gncTableTraversalDir dir)
|
||||||
@ -1165,7 +1166,7 @@ LedgerTraverse (Table *table,
|
|||||||
split = xaccSRGetCurrentSplit (reg);
|
split = xaccSRGetCurrentSplit (reg);
|
||||||
trans = xaccSRGetCurrentTrans (reg);
|
trans = xaccSRGetCurrentTrans (reg);
|
||||||
if (trans == NULL)
|
if (trans == NULL)
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
/* no changes, make sure we aren't going off the end */
|
/* no changes, make sure we aren't going off the end */
|
||||||
changed = xaccSplitRegisterGetChangeFlag (reg);
|
changed = xaccSplitRegisterGetChangeFlag (reg);
|
||||||
@ -1175,9 +1176,77 @@ LedgerTraverse (Table *table,
|
|||||||
|
|
||||||
*p_new_virt_loc = virt_loc;
|
*p_new_virt_loc = virt_loc;
|
||||||
|
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See if we are leaving an account field */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
CellType cell_type;
|
||||||
|
ComboCell *cell;
|
||||||
|
Account *account;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
cell_type = xaccSplitRegisterGetCurrentCellType (reg);
|
||||||
|
|
||||||
|
if (!(cell_type == XFRM_CELL ||
|
||||||
|
cell_type == XTO_CELL ||
|
||||||
|
cell_type == MXFRM_CELL))
|
||||||
|
break;
|
||||||
|
|
||||||
|
cell = NULL;
|
||||||
|
|
||||||
|
switch (cell_type)
|
||||||
|
{
|
||||||
|
case XFRM_CELL:
|
||||||
|
if (changed & MOD_XFRM)
|
||||||
|
cell = reg->xfrmCell;
|
||||||
|
break;
|
||||||
|
case XTO_CELL:
|
||||||
|
if (changed & MOD_XTO)
|
||||||
|
cell = reg->xtoCell;
|
||||||
|
break;
|
||||||
|
case MXFRM_CELL:
|
||||||
|
if (changed & MOD_MXFRM)
|
||||||
|
cell = reg->mxfrmCell;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cell)
|
||||||
|
break;
|
||||||
|
|
||||||
|
name = cell->cell.value;
|
||||||
|
if (!name || *name == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
account = xaccGetAccountFromFullName (gncGetCurrentGroup (),
|
||||||
|
cell->cell.value,
|
||||||
|
account_separator);
|
||||||
|
if (account)
|
||||||
|
break;
|
||||||
|
|
||||||
|
{
|
||||||
|
const char *format = _("The account %s does not exist.\n"
|
||||||
|
"Would you like to create it?");
|
||||||
|
char *message;
|
||||||
|
gboolean result;
|
||||||
|
|
||||||
|
message = g_strdup_printf (format, name);
|
||||||
|
|
||||||
|
result = gnc_verify_dialog_parented (xaccSRGetParent (reg),
|
||||||
|
message, TRUE);
|
||||||
|
if (!result)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gnc_ui_new_accounts_from_name_window (name);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
} while (FALSE);
|
||||||
|
|
||||||
/* See if we are tabbing off the end of the very last line */
|
/* See if we are tabbing off the end of the very last line */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -1204,7 +1273,7 @@ LedgerTraverse (Table *table,
|
|||||||
|
|
||||||
info->traverse_to_new = TRUE;
|
info->traverse_to_new = TRUE;
|
||||||
|
|
||||||
return;
|
return FALSE;
|
||||||
|
|
||||||
} while (FALSE);
|
} while (FALSE);
|
||||||
|
|
||||||
@ -1213,7 +1282,7 @@ LedgerTraverse (Table *table,
|
|||||||
if (!gnc_table_virtual_cell_out_of_bounds (table, virt_loc.vcell_loc))
|
if (!gnc_table_virtual_cell_out_of_bounds (table, virt_loc.vcell_loc))
|
||||||
{
|
{
|
||||||
if (LedgerAutoCompletion(reg, dir, p_new_virt_loc))
|
if (LedgerAutoCompletion(reg, dir, p_new_virt_loc))
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed && (split == NULL) && (dir == GNC_TABLE_TRAVERSE_RIGHT))
|
if (changed && (split == NULL) && (dir == GNC_TABLE_TRAVERSE_RIGHT))
|
||||||
@ -1230,7 +1299,7 @@ LedgerTraverse (Table *table,
|
|||||||
info->cursor_hint_cursor_class = CURSOR_CLASS_SPLIT;
|
info->cursor_hint_cursor_class = CURSOR_CLASS_SPLIT;
|
||||||
info->hint_set_by_traverse = TRUE;
|
info->hint_set_by_traverse = TRUE;
|
||||||
|
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for going off the end */
|
/* Check for going off the end */
|
||||||
@ -1242,7 +1311,7 @@ LedgerTraverse (Table *table,
|
|||||||
{
|
{
|
||||||
*p_new_virt_loc = virt_loc;
|
*p_new_virt_loc = virt_loc;
|
||||||
|
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ok, we are changing transactions and the current transaction has
|
/* Ok, we are changing transactions and the current transaction has
|
||||||
@ -1284,12 +1353,15 @@ LedgerTraverse (Table *table,
|
|||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GNC_VERIFY_CANCEL:
|
case GNC_VERIFY_CANCEL:
|
||||||
*p_new_virt_loc = table->current_cursor_loc;
|
return TRUE;
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
* dialog-account.c -- window for creating and editing accounts for *
|
* dialog-account.c -- window for creating and editing accounts for *
|
||||||
* GnuCash *
|
* GnuCash *
|
||||||
* Copyright (C) 2000 Dave Peticolas <petcola@cs.ucdavis.edu> *
|
* Copyright (C) 2000 Dave Peticolas <dave@krondo.com> *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or *
|
* This program is free software; you can redistribute it and/or *
|
||||||
* modify it under the terms of the GNU General Public License as *
|
* modify it under the terms of the GNU General Public License as *
|
||||||
@ -23,28 +23,28 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <gnome.h>
|
#include <gnome.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "dialog-account.h"
|
|
||||||
#include "AccWindow.h"
|
#include "AccWindow.h"
|
||||||
#include "MainWindow.h"
|
|
||||||
#include "FileDialog.h"
|
#include "FileDialog.h"
|
||||||
|
#include "MainWindow.h"
|
||||||
#include "MultiLedger.h"
|
#include "MultiLedger.h"
|
||||||
#include "Refresh.h"
|
#include "Refresh.h"
|
||||||
#include "window-main.h"
|
|
||||||
#include "dialog-utils.h"
|
|
||||||
#include "account-tree.h"
|
#include "account-tree.h"
|
||||||
#include "global-options.h"
|
#include "dialog-account.h"
|
||||||
#include "gnc-commodity.h"
|
#include "dialog-utils.h"
|
||||||
#include "gnc-commodity-edit.h"
|
|
||||||
#include "gnc-engine.h"
|
|
||||||
#include "glade-gnc-dialogs.h"
|
#include "glade-gnc-dialogs.h"
|
||||||
#include "gnc-ui.h"
|
#include "global-options.h"
|
||||||
#include "window-help.h"
|
#include "gnc-commodity-edit.h"
|
||||||
#include "query-user.h"
|
#include "gnc-commodity.h"
|
||||||
#include "messages.h"
|
|
||||||
#include "gnc-engine-util.h"
|
#include "gnc-engine-util.h"
|
||||||
|
#include "gnc-engine.h"
|
||||||
|
#include "gnc-ui.h"
|
||||||
|
#include "messages.h"
|
||||||
|
#include "query-user.h"
|
||||||
|
#include "window-help.h"
|
||||||
|
#include "window-main.h"
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
@ -63,6 +63,8 @@ struct _AccountWindow
|
|||||||
Account *account;
|
Account *account;
|
||||||
Account *top_level_account;
|
Account *top_level_account;
|
||||||
|
|
||||||
|
GList *subaccount_names;
|
||||||
|
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
|
|
||||||
GtkWidget * name_entry;
|
GtkWidget * name_entry;
|
||||||
@ -95,13 +97,20 @@ static GList *new_account_windows = NULL;
|
|||||||
static AccountWindow ** editAccountList = NULL;
|
static AccountWindow ** editAccountList = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
/** Declarations *********************************************************/
|
||||||
|
static void gnc_account_window_set_name (AccountWindow *aw);
|
||||||
|
static AccountWindow *
|
||||||
|
gnc_ui_new_account_window_internal (Account *base_account,
|
||||||
|
GList *subaccount_names);
|
||||||
|
|
||||||
|
|
||||||
/** Implementation *******************************************************/
|
/** Implementation *******************************************************/
|
||||||
|
|
||||||
/* Copy the account values to the GUI widgets */
|
/* Copy the account values to the GUI widgets */
|
||||||
static void
|
static void
|
||||||
gnc_account_to_ui(AccountWindow *aw)
|
gnc_account_to_ui(AccountWindow *aw)
|
||||||
{
|
{
|
||||||
const gnc_commodity * commodity=NULL;
|
const gnc_commodity * commodity;
|
||||||
const char *string;
|
const char *string;
|
||||||
gboolean tax_related;
|
gboolean tax_related;
|
||||||
gint pos = 0;
|
gint pos = 0;
|
||||||
@ -119,7 +128,7 @@ gnc_account_to_ui(AccountWindow *aw)
|
|||||||
commodity = xaccAccountGetSecurity (aw->account);
|
commodity = xaccAccountGetSecurity (aw->account);
|
||||||
gnc_commodity_edit_set_commodity (GNC_COMMODITY_EDIT (aw->security_edit),
|
gnc_commodity_edit_set_commodity (GNC_COMMODITY_EDIT (aw->security_edit),
|
||||||
commodity);
|
commodity);
|
||||||
|
|
||||||
string = xaccAccountGetCode (aw->account);
|
string = xaccAccountGetCode (aw->account);
|
||||||
gtk_entry_set_text(GTK_ENTRY(aw->code_entry), string);
|
gtk_entry_set_text(GTK_ENTRY(aw->code_entry), string);
|
||||||
|
|
||||||
@ -234,21 +243,57 @@ gnc_ui_to_account(AccountWindow *aw)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_finish_ok(AccountWindow *aw)
|
gnc_finish_ok (AccountWindow *aw)
|
||||||
{
|
{
|
||||||
/* make the account changes */
|
/* make the account changes */
|
||||||
gnc_ui_to_account(aw);
|
gnc_ui_to_account (aw);
|
||||||
|
|
||||||
/* Refresh all registers so they have this account in their lists */
|
/* Refresh all registers so they have this account in their lists */
|
||||||
gnc_group_ui_refresh(gncGetCurrentGroup());
|
gnc_group_ui_refresh (gncGetCurrentGroup());
|
||||||
|
|
||||||
/* Refresh the main window. This will also refresh all account lists. */
|
/* Refresh the main window. This will also refresh all account lists. */
|
||||||
gnc_refresh_main_window();
|
gnc_refresh_main_window ();
|
||||||
|
|
||||||
|
/* do it all again, if needed */
|
||||||
|
if (aw->dialog_type == NEW_ACCOUNT && aw->subaccount_names)
|
||||||
|
{
|
||||||
|
const gnc_commodity *commodity;
|
||||||
|
Account *parent;
|
||||||
|
GList *node;
|
||||||
|
|
||||||
|
parent = aw->account;
|
||||||
|
aw->account = xaccMallocAccount ();
|
||||||
|
aw->type = xaccAccountGetType (parent);
|
||||||
|
|
||||||
|
xaccAccountSetName (aw->account, aw->subaccount_names->data);
|
||||||
|
|
||||||
|
node = aw->subaccount_names;
|
||||||
|
aw->subaccount_names = g_list_remove_link (aw->subaccount_names, node);
|
||||||
|
g_free (node->data);
|
||||||
|
g_list_free_1 (node);
|
||||||
|
|
||||||
|
gnc_account_to_ui (aw);
|
||||||
|
|
||||||
|
gnc_account_window_set_name (aw);
|
||||||
|
|
||||||
|
commodity = xaccAccountGetCurrency (parent);
|
||||||
|
gnc_commodity_edit_set_commodity (GNC_COMMODITY_EDIT (aw->currency_edit),
|
||||||
|
commodity);
|
||||||
|
|
||||||
|
commodity = xaccAccountGetSecurity (parent);
|
||||||
|
gnc_commodity_edit_set_commodity (GNC_COMMODITY_EDIT (aw->security_edit),
|
||||||
|
commodity);
|
||||||
|
|
||||||
|
gnc_account_tree_select_account (GNC_ACCOUNT_TREE(aw->parent_tree),
|
||||||
|
parent, TRUE);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* so it doesn't get freed on close */
|
/* so it doesn't get freed on close */
|
||||||
aw->account = NULL;
|
aw->account = NULL;
|
||||||
|
|
||||||
gnome_dialog_close(GNOME_DIALOG(aw->dialog));
|
gnome_dialog_close (GNOME_DIALOG(aw->dialog));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -284,7 +329,7 @@ gnc_edit_change_account_types(GHashTable *change_type, Account *account,
|
|||||||
|
|
||||||
/* helper function to perform changes to accounts */
|
/* helper function to perform changes to accounts */
|
||||||
static void
|
static void
|
||||||
change_func(gpointer key, gpointer value, gpointer field_code)
|
change_func (gpointer key, gpointer value, gpointer field_code)
|
||||||
{
|
{
|
||||||
Account *account = key;
|
Account *account = key;
|
||||||
AccountFieldCode field = GPOINTER_TO_INT(field_code);
|
AccountFieldCode field = GPOINTER_TO_INT(field_code);
|
||||||
@ -659,7 +704,7 @@ extra_change_verify(AccountWindow *aw,
|
|||||||
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gnc_filter_parent_accounts(Account *account, gpointer data)
|
gnc_filter_parent_accounts (Account *account, gpointer data)
|
||||||
{
|
{
|
||||||
AccountWindow *aw = data;
|
AccountWindow *aw = data;
|
||||||
|
|
||||||
@ -730,17 +775,34 @@ gnc_edit_account_ok(AccountWindow *aw)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
currency =
|
||||||
|
gnc_commodity_edit_get_commodity (GNC_COMMODITY_EDIT (aw->currency_edit));
|
||||||
|
security =
|
||||||
|
gnc_commodity_edit_get_commodity (GNC_COMMODITY_EDIT (aw->security_edit));
|
||||||
|
|
||||||
|
if (!currency)
|
||||||
|
{
|
||||||
|
const char *message = _("You must choose a currency.");
|
||||||
|
gnc_error_dialog_parented(GTK_WINDOW(aw->dialog), message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!security && ((aw->type == STOCK) ||
|
||||||
|
(aw->type == MUTUAL) ||
|
||||||
|
(aw->type == CURRENCY)))
|
||||||
|
{
|
||||||
|
const char *message = _("You must choose a security.");
|
||||||
|
gnc_error_dialog_parented(GTK_WINDOW(aw->dialog), message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
account = aw->account;
|
account = aw->account;
|
||||||
|
|
||||||
change_currency = g_hash_table_new(NULL, NULL);
|
change_currency = g_hash_table_new(NULL, NULL);
|
||||||
change_security = g_hash_table_new(NULL, NULL);
|
change_security = g_hash_table_new(NULL, NULL);
|
||||||
change_type = g_hash_table_new(NULL, NULL);
|
change_type = g_hash_table_new(NULL, NULL);
|
||||||
|
|
||||||
currency =
|
|
||||||
gnc_commodity_edit_get_commodity (GNC_COMMODITY_EDIT (aw->currency_edit));
|
|
||||||
security =
|
|
||||||
gnc_commodity_edit_get_commodity (GNC_COMMODITY_EDIT (aw->security_edit));
|
|
||||||
|
|
||||||
gnc_account_change_currency_security(account,
|
gnc_account_change_currency_security(account,
|
||||||
change_currency,
|
change_currency,
|
||||||
change_security,
|
change_security,
|
||||||
@ -813,15 +875,17 @@ gnc_edit_account_ok(AccountWindow *aw)
|
|||||||
|
|
||||||
gnc_finish_ok (aw);
|
gnc_finish_ok (aw);
|
||||||
|
|
||||||
g_hash_table_destroy(change_currency);
|
g_hash_table_destroy (change_currency);
|
||||||
g_hash_table_destroy(change_security);
|
g_hash_table_destroy (change_security);
|
||||||
g_hash_table_destroy(change_type);
|
g_hash_table_destroy (change_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_new_account_ok (AccountWindow *aw)
|
gnc_new_account_ok (AccountWindow *aw)
|
||||||
{
|
{
|
||||||
|
const gnc_commodity * currency;
|
||||||
|
const gnc_commodity * security;
|
||||||
Account *parent_account;
|
Account *parent_account;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
@ -885,6 +949,28 @@ gnc_new_account_ok (AccountWindow *aw)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check for currency & security */
|
||||||
|
currency =
|
||||||
|
gnc_commodity_edit_get_commodity (GNC_COMMODITY_EDIT (aw->currency_edit));
|
||||||
|
security =
|
||||||
|
gnc_commodity_edit_get_commodity (GNC_COMMODITY_EDIT (aw->security_edit));
|
||||||
|
|
||||||
|
if (!currency)
|
||||||
|
{
|
||||||
|
const char *message = _("You must choose a currency.");
|
||||||
|
gnc_error_dialog_parented(GTK_WINDOW(aw->dialog), message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!security && ((aw->type == STOCK) ||
|
||||||
|
(aw->type == MUTUAL) ||
|
||||||
|
(aw->type == CURRENCY)))
|
||||||
|
{
|
||||||
|
const char *message = _("You must choose a security.");
|
||||||
|
gnc_error_dialog_parented(GTK_WINDOW(aw->dialog), message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
gnc_finish_ok (aw);
|
gnc_finish_ok (aw);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -940,22 +1026,22 @@ gnc_account_window_help_cb(GtkWidget *widget, gpointer data)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gnc_account_window_close_cb(GnomeDialog *dialog, gpointer data)
|
gnc_account_window_close_cb (GnomeDialog *dialog, gpointer data)
|
||||||
{
|
{
|
||||||
AccountWindow * aw = data;
|
AccountWindow *aw = data;
|
||||||
|
|
||||||
switch (aw->dialog_type)
|
switch (aw->dialog_type)
|
||||||
{
|
{
|
||||||
case NEW_ACCOUNT:
|
case NEW_ACCOUNT:
|
||||||
new_account_windows = g_list_remove(new_account_windows, dialog);
|
new_account_windows = g_list_remove (new_account_windows, dialog);
|
||||||
|
|
||||||
if (aw->account != NULL)
|
if (aw->account != NULL)
|
||||||
{
|
{
|
||||||
xaccFreeAccount(aw->account);
|
xaccFreeAccount (aw->account);
|
||||||
aw->account = NULL;
|
aw->account = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG("account add window destroyed\n");
|
DEBUG ("account add window destroyed\n");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -964,19 +1050,28 @@ gnc_account_window_close_cb(GnomeDialog *dialog, gpointer data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
PERR("unexpected dialog type\n");
|
PERR ("unexpected dialog type\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
xaccFreeAccount(aw->top_level_account);
|
xaccFreeAccount (aw->top_level_account);
|
||||||
aw->top_level_account = NULL;
|
aw->top_level_account = NULL;
|
||||||
|
|
||||||
g_free(aw);
|
if (aw->subaccount_names)
|
||||||
|
{
|
||||||
|
GList *node;
|
||||||
|
for (node = aw->subaccount_names; node; node = node->next)
|
||||||
|
g_free (node->data);
|
||||||
|
g_list_free (aw->subaccount_names);
|
||||||
|
aw->subaccount_names = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
gdk_window_get_geometry(GTK_WIDGET(dialog)->window, NULL, NULL,
|
g_free (aw);
|
||||||
&last_width, &last_height, NULL);
|
|
||||||
|
|
||||||
gnc_save_window_size("account_win", last_width, last_height);
|
gdk_window_get_geometry (GTK_WIDGET(dialog)->window, NULL, NULL,
|
||||||
|
&last_width, &last_height, NULL);
|
||||||
|
|
||||||
|
gnc_save_window_size ("account_win", last_width, last_height);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -1095,6 +1190,8 @@ gnc_parent_tree_select(GNCAccountTree *tree,
|
|||||||
gboolean compatible;
|
gboolean compatible;
|
||||||
gint type;
|
gint type;
|
||||||
|
|
||||||
|
gnc_account_window_set_name (aw);
|
||||||
|
|
||||||
if (aw->dialog_type == EDIT_ACCOUNT)
|
if (aw->dialog_type == EDIT_ACCOUNT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1126,6 +1223,14 @@ gnc_parent_tree_select(GNCAccountTree *tree,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_account_name_changed_cb(GtkWidget *widget, gpointer data)
|
||||||
|
{
|
||||||
|
AccountWindow *aw = data;
|
||||||
|
|
||||||
|
gnc_account_window_set_name (aw);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
* gnc_account_window_create *
|
* gnc_account_window_create *
|
||||||
@ -1159,6 +1264,9 @@ gnc_account_window_create(AccountWindow *aw)
|
|||||||
(awd, 2, GTK_SIGNAL_FUNC(gnc_account_window_help_cb), aw);
|
(awd, 2, GTK_SIGNAL_FUNC(gnc_account_window_help_cb), aw);
|
||||||
|
|
||||||
aw->name_entry = gtk_object_get_data(awo, "name_entry");
|
aw->name_entry = gtk_object_get_data(awo, "name_entry");
|
||||||
|
gtk_signal_connect(GTK_OBJECT (aw->name_entry), "changed",
|
||||||
|
GTK_SIGNAL_FUNC(gnc_account_name_changed_cb), aw);
|
||||||
|
|
||||||
aw->description_entry = gtk_object_get_data(awo, "description_entry");
|
aw->description_entry = gtk_object_get_data(awo, "description_entry");
|
||||||
aw->code_entry = gtk_object_get_data(awo, "code_entry");
|
aw->code_entry = gtk_object_get_data(awo, "code_entry");
|
||||||
aw->notes_text = gtk_object_get_data(awo, "notes_text");
|
aw->notes_text = gtk_object_get_data(awo, "notes_text");
|
||||||
@ -1214,6 +1322,128 @@ gnc_account_window_create(AccountWindow *aw)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *
|
||||||
|
get_ui_fullname (AccountWindow *aw)
|
||||||
|
{
|
||||||
|
Account *parent_account;
|
||||||
|
char *fullname;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = gtk_entry_get_text (GTK_ENTRY(aw->name_entry));
|
||||||
|
if (!name || *name == '\0')
|
||||||
|
name = _("<No name>");
|
||||||
|
|
||||||
|
parent_account =
|
||||||
|
gnc_account_tree_get_current_account (GNC_ACCOUNT_TREE(aw->parent_tree));
|
||||||
|
if (parent_account == aw->top_level_account)
|
||||||
|
parent_account = NULL;
|
||||||
|
|
||||||
|
if (parent_account)
|
||||||
|
{
|
||||||
|
char *parent_name;
|
||||||
|
char sep_string[2];
|
||||||
|
|
||||||
|
parent_name = xaccAccountGetFullName (parent_account,
|
||||||
|
gnc_get_account_separator());
|
||||||
|
|
||||||
|
sep_string[0] = gnc_get_account_separator ();
|
||||||
|
sep_string[1] = '\0';
|
||||||
|
|
||||||
|
fullname = g_strconcat (parent_name, sep_string, name, NULL);
|
||||||
|
|
||||||
|
g_free (parent_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fullname = g_strdup (name);
|
||||||
|
|
||||||
|
return fullname;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnc_account_window_set_name (AccountWindow *aw)
|
||||||
|
{
|
||||||
|
char *fullname;
|
||||||
|
char *title;
|
||||||
|
|
||||||
|
fullname = get_ui_fullname (aw);
|
||||||
|
|
||||||
|
if (aw->dialog_type == EDIT_ACCOUNT)
|
||||||
|
title = g_strconcat(_("Edit Account"), " - ", fullname, NULL);
|
||||||
|
else if (g_list_length (aw->subaccount_names) > 0)
|
||||||
|
{
|
||||||
|
const char *format = _("(%d) New Accounts");
|
||||||
|
char *prefix;
|
||||||
|
|
||||||
|
prefix = g_strdup_printf (format,
|
||||||
|
g_list_length (aw->subaccount_names) + 1);
|
||||||
|
|
||||||
|
title = g_strconcat (prefix, " - ", fullname, " ...", NULL);
|
||||||
|
|
||||||
|
g_free (prefix);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
title = g_strconcat (_("New Account"), " - ", fullname, NULL);
|
||||||
|
|
||||||
|
gtk_window_set_title (GTK_WINDOW(aw->dialog), title);
|
||||||
|
|
||||||
|
g_free (fullname);
|
||||||
|
g_free (title);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static AccountWindow *
|
||||||
|
gnc_ui_new_account_window_internal (Account *base_account,
|
||||||
|
GList *subaccount_names)
|
||||||
|
{
|
||||||
|
const gnc_commodity *commodity;
|
||||||
|
AccountWindow *aw;
|
||||||
|
|
||||||
|
aw = g_new0 (AccountWindow, 1);
|
||||||
|
|
||||||
|
aw->dialog_type = NEW_ACCOUNT;
|
||||||
|
aw->account = xaccMallocAccount ();
|
||||||
|
|
||||||
|
if (base_account)
|
||||||
|
aw->type = xaccAccountGetType (base_account);
|
||||||
|
else
|
||||||
|
aw->type = last_used_account_type;
|
||||||
|
|
||||||
|
if (subaccount_names)
|
||||||
|
{
|
||||||
|
GList *node;
|
||||||
|
|
||||||
|
xaccAccountSetName (aw->account, subaccount_names->data);
|
||||||
|
|
||||||
|
aw->subaccount_names = g_list_copy (subaccount_names->next);
|
||||||
|
for (node = aw->subaccount_names; node; node = node->next)
|
||||||
|
node->data = g_strdup (node->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
gnc_account_window_create (aw);
|
||||||
|
|
||||||
|
gnc_account_to_ui (aw);
|
||||||
|
|
||||||
|
gnc_account_window_set_name (aw);
|
||||||
|
|
||||||
|
new_account_windows = g_list_prepend (new_account_windows, aw->dialog);
|
||||||
|
|
||||||
|
commodity = gnc_lookup_currency_option ("International",
|
||||||
|
"Default Currency",
|
||||||
|
gnc_locale_default_currency ());
|
||||||
|
|
||||||
|
gnc_commodity_edit_set_commodity (GNC_COMMODITY_EDIT (aw->currency_edit),
|
||||||
|
commodity);
|
||||||
|
|
||||||
|
gtk_widget_show_all (aw->dialog);
|
||||||
|
|
||||||
|
gnc_account_tree_select_account (GNC_ACCOUNT_TREE(aw->parent_tree),
|
||||||
|
base_account, TRUE);
|
||||||
|
|
||||||
|
gnc_window_adjust_for_screen (GTK_WINDOW(aw->dialog));
|
||||||
|
|
||||||
|
return aw;
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
* gnc_ui_new_account_window *
|
* gnc_ui_new_account_window *
|
||||||
* opens up a window to create a new account. *
|
* opens up a window to create a new account. *
|
||||||
@ -1224,55 +1454,86 @@ gnc_account_window_create(AccountWindow *aw)
|
|||||||
AccountWindow *
|
AccountWindow *
|
||||||
gnc_ui_new_account_window (AccountGroup *this_is_not_used)
|
gnc_ui_new_account_window (AccountGroup *this_is_not_used)
|
||||||
{
|
{
|
||||||
const gnc_commodity *commodity;
|
return gnc_ui_new_account_window_internal (gnc_get_current_account (), NULL);
|
||||||
AccountWindow *aw;
|
|
||||||
Account *parent;
|
|
||||||
|
|
||||||
aw = g_new0(AccountWindow, 1);
|
|
||||||
|
|
||||||
aw->dialog_type = NEW_ACCOUNT;
|
|
||||||
aw->account = xaccMallocAccount();
|
|
||||||
aw->type = last_used_account_type;
|
|
||||||
|
|
||||||
gnc_account_window_create(aw);
|
|
||||||
new_account_windows = g_list_prepend(new_account_windows, aw->dialog);
|
|
||||||
|
|
||||||
commodity = gnc_lookup_currency_option ("International",
|
|
||||||
"Default Currency",
|
|
||||||
gnc_locale_default_currency ());
|
|
||||||
|
|
||||||
gnc_commodity_edit_set_commodity (GNC_COMMODITY_EDIT (aw->currency_edit),
|
|
||||||
commodity);
|
|
||||||
|
|
||||||
gtk_widget_show_all(aw->dialog);
|
|
||||||
|
|
||||||
parent = gnc_get_current_account();
|
|
||||||
gnc_account_tree_select_account(GNC_ACCOUNT_TREE(aw->parent_tree),
|
|
||||||
parent, TRUE);
|
|
||||||
|
|
||||||
gnc_window_adjust_for_screen(GTK_WINDOW(aw->dialog));
|
|
||||||
|
|
||||||
return aw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
gnc_split_account_name (const char *in_name, Account **base_account)
|
||||||
|
{
|
||||||
|
AccountGroup *group;
|
||||||
|
GList *names;
|
||||||
|
char separator;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
names = NULL;
|
||||||
|
name = g_strdup (in_name);
|
||||||
|
*base_account = NULL;
|
||||||
|
group = gncGetCurrentGroup ();
|
||||||
|
|
||||||
|
separator = gnc_get_account_separator ();
|
||||||
|
|
||||||
|
while (name && *name != '\0')
|
||||||
|
{
|
||||||
|
Account *account;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
account = xaccGetAccountFromFullName (group, name, separator);
|
||||||
|
if (account)
|
||||||
|
{
|
||||||
|
*base_account = account;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = strrchr (name, separator);
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
|
||||||
|
if (*p == '\0')
|
||||||
|
{
|
||||||
|
GList *node;
|
||||||
|
for (node = names; node; node = node->next)
|
||||||
|
g_free (node->data);
|
||||||
|
g_list_free (names);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
names = g_list_prepend (names, g_strdup (p));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
names = g_list_prepend (names, g_strdup (name));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (name);
|
||||||
|
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
AccountWindow *
|
AccountWindow *
|
||||||
gnc_ui_new_accounts_from_name_window (const char *name)
|
gnc_ui_new_accounts_from_name_window (const char *name)
|
||||||
{
|
{
|
||||||
}
|
AccountWindow *aw;
|
||||||
|
Account *base_account;
|
||||||
|
GList * subaccount_names;
|
||||||
|
GList * node;
|
||||||
|
|
||||||
static void
|
if (!name || *name == '\0')
|
||||||
gnc_edit_window_set_name(AccountWindow *aw)
|
return gnc_ui_new_account_window (NULL);
|
||||||
{
|
|
||||||
char *fullname;
|
|
||||||
char *title;
|
|
||||||
|
|
||||||
fullname = xaccAccountGetFullName(aw->account, gnc_get_account_separator());
|
subaccount_names = gnc_split_account_name (name, &base_account);
|
||||||
title = g_strconcat(fullname, " - ", _("Edit Account"), NULL);
|
|
||||||
|
|
||||||
gtk_window_set_title(GTK_WINDOW(aw->dialog), title);
|
aw = gnc_ui_new_account_window_internal (base_account, subaccount_names);
|
||||||
|
|
||||||
g_free(fullname);
|
for (node = subaccount_names; node; node = node->next)
|
||||||
g_free(title);
|
g_free (node->data);
|
||||||
|
g_list_free (subaccount_names);
|
||||||
|
|
||||||
|
return aw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1296,13 +1557,14 @@ gnc_ui_edit_account_window(Account *account)
|
|||||||
|
|
||||||
aw->dialog_type = EDIT_ACCOUNT;
|
aw->dialog_type = EDIT_ACCOUNT;
|
||||||
aw->account = account;
|
aw->account = account;
|
||||||
gnc_account_window_create(aw);
|
aw->subaccount_names = NULL;
|
||||||
|
gnc_account_window_create (aw);
|
||||||
|
|
||||||
gnc_account_to_ui(aw);
|
gnc_account_to_ui (aw);
|
||||||
|
|
||||||
gnc_edit_window_set_name(aw);
|
gnc_account_window_set_name (aw);
|
||||||
|
|
||||||
gtk_widget_show_all(aw->dialog);
|
gtk_widget_show_all (aw->dialog);
|
||||||
|
|
||||||
parent = xaccAccountGetParentAccount (account);
|
parent = xaccAccountGetParentAccount (account);
|
||||||
if (parent == NULL)
|
if (parent == NULL)
|
||||||
@ -1353,7 +1615,7 @@ gnc_ui_refresh_edit_account_window(Account *account)
|
|||||||
if (aw == NULL)
|
if (aw == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gnc_edit_window_set_name(aw);
|
gnc_account_window_set_name (aw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1393,6 +1393,7 @@ gnc_table_traverse_update(Table *table,
|
|||||||
VirtualLocation *dest_loc)
|
VirtualLocation *dest_loc)
|
||||||
{
|
{
|
||||||
CellBlock *cb;
|
CellBlock *cb;
|
||||||
|
gboolean abort_move;
|
||||||
|
|
||||||
if ((table == NULL) || (dest_loc == NULL))
|
if ((table == NULL) || (dest_loc == NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -1485,12 +1486,12 @@ gnc_table_traverse_update(Table *table,
|
|||||||
|
|
||||||
/* Call the table traverse callback for any modifications. */
|
/* Call the table traverse callback for any modifications. */
|
||||||
if (table->traverse)
|
if (table->traverse)
|
||||||
(table->traverse) (table, dest_loc, dir);
|
abort_move = table->traverse (table, dest_loc, dir);
|
||||||
|
|
||||||
LEAVE("dest_row = %d, dest_col = %d\n",
|
LEAVE("dest_row = %d, dest_col = %d\n",
|
||||||
dest_loc->vcell_loc.virt_row, dest_loc->vcell_loc.virt_col);
|
dest_loc->vcell_loc.virt_row, dest_loc->vcell_loc.virt_col);
|
||||||
|
|
||||||
return FALSE;
|
return abort_move;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================== end of file ======================= */
|
/* ================== end of file ======================= */
|
||||||
|
@ -141,9 +141,9 @@ typedef struct _Table Table;
|
|||||||
typedef void (*TableMoveFunc) (Table *table,
|
typedef void (*TableMoveFunc) (Table *table,
|
||||||
VirtualLocation *new_virt_loc);
|
VirtualLocation *new_virt_loc);
|
||||||
|
|
||||||
typedef void (*TableTraverseFunc) (Table *table,
|
typedef gboolean (*TableTraverseFunc) (Table *table,
|
||||||
VirtualLocation *new_virt_loc,
|
VirtualLocation *new_virt_loc,
|
||||||
gncTableTraversalDir dir);
|
gncTableTraversalDir dir);
|
||||||
|
|
||||||
typedef void (*TableSetHelpFunc) (Table *table,
|
typedef void (*TableSetHelpFunc) (Table *table,
|
||||||
const char *help_str);
|
const char *help_str);
|
||||||
|
Loading…
Reference in New Issue
Block a user