mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
More work on refresh arch.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3368 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
dfd62db5e9
commit
a04fd0f690
@ -39,18 +39,112 @@
|
|||||||
#define REGISTER_SUBACCOUNT_CM_CLASS "register-subaccount"
|
#define REGISTER_SUBACCOUNT_CM_CLASS "register-subaccount"
|
||||||
#define REGISTER_GL_CM_CLASS "register-gl"
|
#define REGISTER_GL_CM_CLASS "register-gl"
|
||||||
|
|
||||||
|
|
||||||
|
struct _xaccLedgerDisplay
|
||||||
|
{
|
||||||
|
GUID leader;
|
||||||
|
|
||||||
|
Query *query;
|
||||||
|
|
||||||
|
LedgerDisplayType ld_type;
|
||||||
|
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
|
LedgerDisplayDestroy destroy;
|
||||||
|
LedgerDisplayGetParent get_parent;
|
||||||
|
LedgerDisplaySetHelp set_help;
|
||||||
|
|
||||||
|
gpointer user_data;
|
||||||
|
|
||||||
|
gint component_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/** GLOBALS *********************************************************/
|
/** GLOBALS *********************************************************/
|
||||||
static short module = MOD_LEDGER;
|
static short module = MOD_LEDGER;
|
||||||
|
|
||||||
|
|
||||||
/** Declarations ****************************************************/
|
/** Declarations ****************************************************/
|
||||||
static xaccLedgerDisplay *
|
static xaccLedgerDisplay *
|
||||||
xaccLedgerDisplayInternal (Account *lead_account, GList *accounts, Query *q,
|
xaccLedgerDisplayInternal (Account *lead_account, Query *q,
|
||||||
SplitRegisterType type, SplitRegisterStyle style);
|
LedgerDisplayType ld_type,
|
||||||
|
SplitRegisterType reg_type,
|
||||||
|
SplitRegisterStyle style);
|
||||||
|
|
||||||
|
|
||||||
/** Implementations *************************************************/
|
/** Implementations *************************************************/
|
||||||
|
|
||||||
|
Account *
|
||||||
|
xaccLedgerDisplayLeader (xaccLedgerDisplay *ld)
|
||||||
|
{
|
||||||
|
if (!ld)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return xaccAccountLookup (&ld->leader);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
xaccLedgerDisplaySetUserData (xaccLedgerDisplay *ld, gpointer user_data)
|
||||||
|
{
|
||||||
|
if (!ld)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ld->user_data = user_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpointer
|
||||||
|
xaccLedgerDisplayGetUserData (xaccLedgerDisplay *ld)
|
||||||
|
{
|
||||||
|
if (!ld)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return ld->user_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
xaccLedgerDisplaySetHandlers (xaccLedgerDisplay *ld,
|
||||||
|
LedgerDisplayDestroy destroy,
|
||||||
|
LedgerDisplayGetParent get_parent,
|
||||||
|
LedgerDisplaySetHelp set_help)
|
||||||
|
{
|
||||||
|
if (!ld)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ld->destroy = destroy;
|
||||||
|
ld->get_parent = get_parent;
|
||||||
|
ld->set_help = set_help;
|
||||||
|
}
|
||||||
|
|
||||||
|
SplitRegister *
|
||||||
|
xaccLedgerDisplayGetSR (xaccLedgerDisplay *ld)
|
||||||
|
{
|
||||||
|
if (!ld)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return ld->reg;
|
||||||
|
}
|
||||||
|
|
||||||
|
Query *
|
||||||
|
xaccLedgerDisplayGetQuery (xaccLedgerDisplay *ld)
|
||||||
|
{
|
||||||
|
if (!ld)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return ld->query;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
find_by_leader (gpointer find_data, gpointer user_data)
|
||||||
|
{
|
||||||
|
Account *account = find_data;
|
||||||
|
xaccLedgerDisplay *ld = user_data;
|
||||||
|
|
||||||
|
if (!account || !ld)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return (account == xaccLedgerDisplayLeader (ld));
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
find_by_account (gpointer find_data, gpointer user_data)
|
find_by_account (gpointer find_data, gpointer user_data)
|
||||||
{
|
{
|
||||||
@ -60,15 +154,12 @@ find_by_account (gpointer find_data, gpointer user_data)
|
|||||||
if (!account || !ld)
|
if (!account || !ld)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (account == ld->leader)
|
if (account == xaccLedgerDisplayLeader (ld))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (ld->type < NUM_SINGLE_REGISTER_TYPES)
|
if (ld->ld_type == LD_SINGLE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (ld->displayed_accounts)
|
|
||||||
return g_list_find (ld->displayed_accounts, account) != NULL;
|
|
||||||
|
|
||||||
/* Hack. */
|
/* Hack. */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -108,6 +199,121 @@ gnc_get_default_register_style ()
|
|||||||
return new_style;
|
return new_style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SplitRegisterType
|
||||||
|
get_reg_type (Account *leader, LedgerDisplayType ld_type)
|
||||||
|
{
|
||||||
|
GNCAccountType account_type;
|
||||||
|
SplitRegisterType reg_type;
|
||||||
|
GList *subaccounts;
|
||||||
|
GList *node;
|
||||||
|
|
||||||
|
if (ld_type == LD_GL)
|
||||||
|
return GENERAL_LEDGER;
|
||||||
|
|
||||||
|
account_type = xaccAccountGetType (leader);
|
||||||
|
|
||||||
|
if (ld_type == LD_SINGLE)
|
||||||
|
{
|
||||||
|
switch (account_type)
|
||||||
|
{
|
||||||
|
case BANK:
|
||||||
|
return BANK_REGISTER;
|
||||||
|
|
||||||
|
case CASH:
|
||||||
|
return CASH_REGISTER;
|
||||||
|
|
||||||
|
case ASSET:
|
||||||
|
return ASSET_REGISTER;
|
||||||
|
|
||||||
|
case CREDIT:
|
||||||
|
return CREDIT_REGISTER;
|
||||||
|
|
||||||
|
case LIABILITY:
|
||||||
|
return LIABILITY_REGISTER;
|
||||||
|
|
||||||
|
case STOCK:
|
||||||
|
case MUTUAL:
|
||||||
|
return STOCK_REGISTER;
|
||||||
|
|
||||||
|
case INCOME:
|
||||||
|
return INCOME_REGISTER;
|
||||||
|
|
||||||
|
case EXPENSE:
|
||||||
|
return EXPENSE_REGISTER;
|
||||||
|
|
||||||
|
case EQUITY:
|
||||||
|
return EQUITY_REGISTER;
|
||||||
|
|
||||||
|
case CURRENCY:
|
||||||
|
return CURRENCY_REGISTER;
|
||||||
|
|
||||||
|
default:
|
||||||
|
PERR ("unknown account type %d\n", account_type);
|
||||||
|
return BANK_REGISTER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ld_type != LD_SUBACCOUNT)
|
||||||
|
{
|
||||||
|
PERR ("unknown ledger type %d\n", ld_type);
|
||||||
|
return BANK_REGISTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
subaccounts = xaccGroupGetSubAccounts (xaccAccountGetChildren (leader));
|
||||||
|
|
||||||
|
switch (account_type)
|
||||||
|
{
|
||||||
|
case BANK:
|
||||||
|
case CASH:
|
||||||
|
case ASSET:
|
||||||
|
case CREDIT:
|
||||||
|
case LIABILITY:
|
||||||
|
/* if any of the sub-accounts have STOCK or MUTUAL types,
|
||||||
|
* then we must use the PORTFOLIO_LEDGER ledger. Otherwise,
|
||||||
|
* a plain old GENERAL_LEDGER will do. */
|
||||||
|
reg_type = GENERAL_LEDGER;
|
||||||
|
|
||||||
|
for (node = subaccounts; node; node = node->next)
|
||||||
|
{
|
||||||
|
GNCAccountType le_type;
|
||||||
|
|
||||||
|
le_type = xaccAccountGetType (node->data);
|
||||||
|
if ((STOCK == le_type) ||
|
||||||
|
(MUTUAL == le_type) ||
|
||||||
|
(CURRENCY == le_type))
|
||||||
|
{
|
||||||
|
reg_type = PORTFOLIO_LEDGER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STOCK:
|
||||||
|
case MUTUAL:
|
||||||
|
case CURRENCY:
|
||||||
|
reg_type = PORTFOLIO_LEDGER;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case INCOME:
|
||||||
|
case EXPENSE:
|
||||||
|
reg_type = INCOME_LEDGER;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EQUITY:
|
||||||
|
reg_type = GENERAL_LEDGER;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
PERR ("unknown account type:%d", account_type);
|
||||||
|
reg_type = GENERAL_LEDGER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_list_free (subaccounts);
|
||||||
|
|
||||||
|
return reg_type;
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
* regWindowSimple *
|
* regWindowSimple *
|
||||||
* opens up a register window to display a single account *
|
* opens up a register window to display a single account *
|
||||||
@ -120,78 +326,13 @@ xaccLedgerDisplay *
|
|||||||
xaccLedgerDisplaySimple (Account *account)
|
xaccLedgerDisplaySimple (Account *account)
|
||||||
{
|
{
|
||||||
SplitRegisterType reg_type;
|
SplitRegisterType reg_type;
|
||||||
GNCAccountType account_type;
|
|
||||||
|
|
||||||
account_type = xaccAccountGetType (account);
|
reg_type = get_reg_type (account, LD_SINGLE);
|
||||||
|
|
||||||
/* translate between different enumerants */
|
return xaccLedgerDisplayInternal (account, NULL, LD_SINGLE, reg_type,
|
||||||
switch (account_type)
|
|
||||||
{
|
|
||||||
case BANK:
|
|
||||||
reg_type = BANK_REGISTER;
|
|
||||||
break;
|
|
||||||
case CASH:
|
|
||||||
reg_type = CASH_REGISTER;
|
|
||||||
break;
|
|
||||||
case ASSET:
|
|
||||||
reg_type = ASSET_REGISTER;
|
|
||||||
break;
|
|
||||||
case CREDIT:
|
|
||||||
reg_type = CREDIT_REGISTER;
|
|
||||||
break;
|
|
||||||
case LIABILITY:
|
|
||||||
reg_type = LIABILITY_REGISTER;
|
|
||||||
break;
|
|
||||||
case STOCK:
|
|
||||||
case MUTUAL:
|
|
||||||
reg_type = STOCK_REGISTER;
|
|
||||||
break;
|
|
||||||
case INCOME:
|
|
||||||
reg_type = INCOME_REGISTER;
|
|
||||||
break;
|
|
||||||
case EXPENSE:
|
|
||||||
reg_type = EXPENSE_REGISTER;
|
|
||||||
break;
|
|
||||||
case EQUITY:
|
|
||||||
reg_type = EQUITY_REGISTER;
|
|
||||||
break;
|
|
||||||
case CURRENCY:
|
|
||||||
reg_type = CURRENCY_REGISTER;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
PERR ("unknown account type %d\n", account_type);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return xaccLedgerDisplayInternal (account, NULL, NULL, reg_type,
|
|
||||||
gnc_get_default_register_style ());
|
gnc_get_default_register_style ());
|
||||||
}
|
}
|
||||||
|
|
||||||
static GList *
|
|
||||||
xaccAccountPrependChildren (Account *account, GList *list)
|
|
||||||
{
|
|
||||||
AccountGroup *group;
|
|
||||||
int num_accounts;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!account) return NULL;
|
|
||||||
|
|
||||||
list = g_list_prepend(list, account);
|
|
||||||
|
|
||||||
group = xaccAccountGetChildren (account);
|
|
||||||
if (group == NULL)
|
|
||||||
return list;
|
|
||||||
|
|
||||||
num_accounts = xaccGroupGetNumAccounts (group);
|
|
||||||
for (i = 0; i < num_accounts; i++)
|
|
||||||
{
|
|
||||||
account = xaccGroupGetAccount (group, i);
|
|
||||||
list = xaccAccountPrependChildren (account, list);
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
* xaccLedgerDisplayAccGroup *
|
* xaccLedgerDisplayAccGroup *
|
||||||
* opens up a register window to display an account, and all *
|
* opens up a register window to display an account, and all *
|
||||||
@ -206,62 +347,12 @@ xaccLedgerDisplayAccGroup (Account *account)
|
|||||||
{
|
{
|
||||||
xaccLedgerDisplay *ld;
|
xaccLedgerDisplay *ld;
|
||||||
SplitRegisterType reg_type;
|
SplitRegisterType reg_type;
|
||||||
GNCAccountType le_type;
|
|
||||||
GList *accounts;
|
|
||||||
GList *node;
|
|
||||||
|
|
||||||
/* build a flat list from the tree */
|
reg_type = get_reg_type (account, LD_SUBACCOUNT);
|
||||||
accounts = xaccAccountPrependChildren (account, NULL);
|
|
||||||
accounts = g_list_reverse (accounts);
|
|
||||||
|
|
||||||
switch (xaccAccountGetType (account))
|
ld = xaccLedgerDisplayInternal (account, NULL, LD_SUBACCOUNT,
|
||||||
{
|
|
||||||
case BANK:
|
|
||||||
case CASH:
|
|
||||||
case ASSET:
|
|
||||||
case CREDIT:
|
|
||||||
case LIABILITY:
|
|
||||||
/* if any of the sub-accounts have STOCK or MUTUAL types,
|
|
||||||
* then we must use the PORTFOLIO_LEDGER ledger. Otherwise,
|
|
||||||
* a plain old GENERAL_LEDGER will do. */
|
|
||||||
reg_type = GENERAL_LEDGER;
|
|
||||||
|
|
||||||
for (node = accounts; node; node = node->next)
|
|
||||||
{
|
|
||||||
le_type = xaccAccountGetType (node->data);
|
|
||||||
if ((STOCK == le_type) || (MUTUAL == le_type))
|
|
||||||
{
|
|
||||||
reg_type = PORTFOLIO_LEDGER;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STOCK:
|
|
||||||
case MUTUAL:
|
|
||||||
reg_type = PORTFOLIO_LEDGER;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INCOME:
|
|
||||||
case EXPENSE:
|
|
||||||
reg_type = INCOME_LEDGER;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EQUITY:
|
|
||||||
reg_type = GENERAL_LEDGER;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
PERR ("unknown account type \n");
|
|
||||||
g_list_free (accounts);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ld = xaccLedgerDisplayInternal (account, accounts, NULL,
|
|
||||||
reg_type, REG_STYLE_JOURNAL);
|
reg_type, REG_STYLE_JOURNAL);
|
||||||
|
|
||||||
g_list_free (accounts);
|
|
||||||
|
|
||||||
return ld;
|
return ld;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,6 +423,36 @@ xaccGUIDCopy (gpointer _to, gconstpointer _from)
|
|||||||
*to = *from;
|
*to = *from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static void
|
||||||
|
refresh_handler (GHashTable *changes, gpointer user_data)
|
||||||
|
{
|
||||||
|
xaccLedgerDisplay *ld = user_data;
|
||||||
|
const EventInfo *info;
|
||||||
|
|
||||||
|
if (ld->type > NUM_SINGLE_REGISTER_TYPES)
|
||||||
|
{
|
||||||
|
Account *leader = xaccLedgerDisplayLeader (ld);
|
||||||
|
if (!account)
|
||||||
|
{
|
||||||
|
gnc_close_gui_component (ld->component_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changes)
|
||||||
|
{
|
||||||
|
info = gnc_gui_get_entity_events (changes, &recnData->account);
|
||||||
|
if (info && (info->event_mask & GNC_EVENT_DESTROY))
|
||||||
|
{
|
||||||
|
gnc_close_gui_component_by_data (WINDOW_RECONCILE_CM_CLASS, recnData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
recnRefresh (recnData);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
close_handler (gpointer user_data)
|
close_handler (gpointer user_data)
|
||||||
{
|
{
|
||||||
@ -351,16 +472,35 @@ close_handler (gpointer user_data)
|
|||||||
xaccFreeQuery (ld->query);
|
xaccFreeQuery (ld->query);
|
||||||
ld->query = NULL;
|
ld->query = NULL;
|
||||||
|
|
||||||
g_list_free (ld->displayed_accounts);
|
|
||||||
ld->displayed_accounts = NULL;
|
|
||||||
|
|
||||||
g_free (ld);
|
g_free (ld);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
make_ledger_query (xaccLedgerDisplay *ld, gboolean show_all,
|
make_ledger_query (xaccLedgerDisplay *ld,
|
||||||
|
gboolean show_all,
|
||||||
SplitRegisterType type)
|
SplitRegisterType type)
|
||||||
{
|
{
|
||||||
|
Account *leader;
|
||||||
|
GList *accounts;
|
||||||
|
|
||||||
|
if (!ld)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (ld->ld_type)
|
||||||
|
{
|
||||||
|
case LD_SINGLE:
|
||||||
|
case LD_SUBACCOUNT:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LD_GL:
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
PERR ("unknown ledger type: %d", ld->ld_type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xaccFreeQuery (ld->query);
|
||||||
ld->query = xaccMallocQuery ();
|
ld->query = xaccMallocQuery ();
|
||||||
|
|
||||||
/* This is a bit of a hack. The number of splits should be
|
/* This is a bit of a hack. The number of splits should be
|
||||||
@ -372,13 +512,19 @@ make_ledger_query (xaccLedgerDisplay *ld, gboolean show_all,
|
|||||||
|
|
||||||
xaccQuerySetGroup (ld->query, gncGetCurrentGroup());
|
xaccQuerySetGroup (ld->query, gncGetCurrentGroup());
|
||||||
|
|
||||||
if (ld->displayed_accounts)
|
leader = xaccLedgerDisplayLeader (ld);
|
||||||
xaccQueryAddAccountMatch (ld->query, ld->displayed_accounts,
|
|
||||||
ACCT_MATCH_ANY, QUERY_OR);
|
|
||||||
|
|
||||||
if (ld->leader &&
|
if (ld->ld_type == LD_SUBACCOUNT)
|
||||||
(g_list_find (ld->displayed_accounts, ld->leader) == NULL))
|
accounts = xaccGroupGetSubAccounts (xaccAccountGetChildren (leader));
|
||||||
xaccQueryAddSingleAccountMatch (ld->query, ld->leader, QUERY_OR);
|
else
|
||||||
|
accounts = NULL;
|
||||||
|
|
||||||
|
accounts = g_list_prepend (accounts, leader);
|
||||||
|
|
||||||
|
xaccQueryAddAccountMatch (ld->query, accounts,
|
||||||
|
ACCT_MATCH_ANY, QUERY_OR);
|
||||||
|
|
||||||
|
g_list_free (accounts);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
@ -394,75 +540,93 @@ xaccLedgerDisplay *
|
|||||||
xaccLedgerDisplayQuery (Query *query, SplitRegisterType type,
|
xaccLedgerDisplayQuery (Query *query, SplitRegisterType type,
|
||||||
SplitRegisterStyle style)
|
SplitRegisterStyle style)
|
||||||
{
|
{
|
||||||
return xaccLedgerDisplayInternal (NULL, NULL, query, type, style);
|
return xaccLedgerDisplayInternal (NULL, query, LD_GL, type, style);
|
||||||
}
|
}
|
||||||
|
|
||||||
static xaccLedgerDisplay *
|
static xaccLedgerDisplay *
|
||||||
xaccLedgerDisplayInternal (Account *lead_account, GList *accounts, Query *q,
|
xaccLedgerDisplayInternal (Account *lead_account, Query *q,
|
||||||
SplitRegisterType type, SplitRegisterStyle style)
|
LedgerDisplayType ld_type,
|
||||||
|
SplitRegisterType reg_type,
|
||||||
|
SplitRegisterStyle style)
|
||||||
{
|
{
|
||||||
xaccLedgerDisplay *ld;
|
xaccLedgerDisplay *ld;
|
||||||
gboolean show_all;
|
gboolean show_all;
|
||||||
const char *class;
|
const char *class;
|
||||||
|
|
||||||
if (type < NUM_SINGLE_REGISTER_TYPES) /* single account types */
|
switch (ld_type)
|
||||||
{
|
{
|
||||||
if (!lead_account)
|
case LD_SINGLE:
|
||||||
{
|
class = REGISTER_SINGLE_CM_CLASS;
|
||||||
PERR ("single-account register with no account specified");
|
|
||||||
|
if (reg_type >= NUM_SINGLE_REGISTER_TYPES)
|
||||||
|
{
|
||||||
|
PERR ("single-account register with wrong split register type");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lead_account)
|
||||||
|
{
|
||||||
|
PERR ("single-account register with no account specified");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q)
|
||||||
|
{
|
||||||
|
PWARN ("single-account register with external query");
|
||||||
|
q = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ld = gnc_find_first_gui_component (class, find_by_leader, lead_account);
|
||||||
|
if (ld)
|
||||||
|
return ld;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LD_SUBACCOUNT:
|
||||||
|
class = REGISTER_SUBACCOUNT_CM_CLASS;
|
||||||
|
|
||||||
|
if (!lead_account)
|
||||||
|
{
|
||||||
|
PERR ("sub-account register with no lead account");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q)
|
||||||
|
{
|
||||||
|
PWARN ("account register with external query");
|
||||||
|
q = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ld = gnc_find_first_gui_component (class, find_by_leader, lead_account);
|
||||||
|
if (ld)
|
||||||
|
return ld;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LD_GL:
|
||||||
|
class = REGISTER_GL_CM_CLASS;
|
||||||
|
|
||||||
|
if (!q)
|
||||||
|
{
|
||||||
|
PWARN ("general ledger with no query");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
PERR ("bad ledger type: %d", ld_type);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (q)
|
|
||||||
{
|
|
||||||
PWARN ("single-account register with external query");
|
|
||||||
q = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
class = REGISTER_SINGLE_CM_CLASS;
|
|
||||||
|
|
||||||
ld = gnc_find_first_gui_component (class, find_by_account, lead_account);
|
|
||||||
|
|
||||||
if (ld)
|
|
||||||
return ld;
|
|
||||||
}
|
|
||||||
else if (lead_account) /* sub-account registers */
|
|
||||||
{
|
|
||||||
class = REGISTER_SUBACCOUNT_CM_CLASS;
|
|
||||||
|
|
||||||
ld = gnc_find_first_gui_component (class, find_by_account, lead_account);
|
|
||||||
|
|
||||||
if (q)
|
|
||||||
{
|
|
||||||
PWARN ("account register with external query");
|
|
||||||
q = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ld)
|
|
||||||
return ld;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
class = REGISTER_GL_CM_CLASS;
|
|
||||||
|
|
||||||
if (!q)
|
|
||||||
{
|
|
||||||
PWARN ("general ledger with no query");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ld = g_new (xaccLedgerDisplay, 1);
|
ld = g_new (xaccLedgerDisplay, 1);
|
||||||
|
|
||||||
ld->type = type;
|
ld->leader = *xaccAccountGetGUID (lead_account);
|
||||||
ld->leader = lead_account;
|
ld->query = NULL;
|
||||||
|
ld->ld_type = ld_type;
|
||||||
ld->destroy = NULL;
|
ld->destroy = NULL;
|
||||||
ld->get_parent = NULL;
|
ld->get_parent = NULL;
|
||||||
ld->set_help = NULL;
|
ld->set_help = NULL;
|
||||||
ld->gui_hook = NULL;
|
ld->user_data = NULL;
|
||||||
ld->dirty = FALSE;
|
|
||||||
|
|
||||||
/* store the displayed accounts */
|
|
||||||
ld->displayed_accounts = g_list_copy (accounts);
|
|
||||||
|
|
||||||
show_all = gnc_lookup_boolean_option ("Register",
|
show_all = gnc_lookup_boolean_option ("Register",
|
||||||
"Show All Transactions",
|
"Show All Transactions",
|
||||||
@ -472,7 +636,7 @@ xaccLedgerDisplayInternal (Account *lead_account, GList *accounts, Query *q,
|
|||||||
if (q)
|
if (q)
|
||||||
ld->query = xaccQueryCopy (q);
|
ld->query = xaccQueryCopy (q);
|
||||||
else
|
else
|
||||||
make_ledger_query (ld, show_all, type);
|
make_ledger_query (ld, show_all, reg_type);
|
||||||
|
|
||||||
ld->component_id = gnc_register_gui_component (class, NULL,
|
ld->component_id = gnc_register_gui_component (class, NULL,
|
||||||
close_handler, ld);
|
close_handler, ld);
|
||||||
@ -483,7 +647,7 @@ xaccLedgerDisplayInternal (Account *lead_account, GList *accounts, Query *q,
|
|||||||
|
|
||||||
/* xaccMallocSplitRegister will malloc & initialize the register,
|
/* xaccMallocSplitRegister will malloc & initialize the register,
|
||||||
* but will not do the gui init */
|
* but will not do the gui init */
|
||||||
ld->reg = xaccMallocSplitRegister (type, style, FALSE,
|
ld->reg = xaccMallocSplitRegister (reg_type, style, FALSE,
|
||||||
xaccSRGetEntryHandler,
|
xaccSRGetEntryHandler,
|
||||||
xaccSRGetLabelHandler,
|
xaccSRGetLabelHandler,
|
||||||
xaccSRGetIOFlagsHandler,
|
xaccSRGetIOFlagsHandler,
|
||||||
@ -498,7 +662,6 @@ xaccLedgerDisplayInternal (Account *lead_account, GList *accounts, Query *q,
|
|||||||
xaccLedgerDisplayParent,
|
xaccLedgerDisplayParent,
|
||||||
xaccLedgerDisplaySetHelp);
|
xaccLedgerDisplaySetHelp);
|
||||||
|
|
||||||
ld->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh (ld);
|
xaccLedgerDisplayRefresh (ld);
|
||||||
|
|
||||||
return ld;
|
return ld;
|
||||||
@ -510,6 +673,8 @@ xaccLedgerDisplaySetQuery (xaccLedgerDisplay *ledger_display, Query *q)
|
|||||||
if (!ledger_display || !q)
|
if (!ledger_display || !q)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
g_return_if_fail (ledger_display->ld_type == LD_GL);
|
||||||
|
|
||||||
xaccFreeQuery (ledger_display->query);
|
xaccFreeQuery (ledger_display->query);
|
||||||
ledger_display->query = xaccQueryCopy (q);
|
ledger_display->query = xaccQueryCopy (q);
|
||||||
}
|
}
|
||||||
@ -530,18 +695,17 @@ xaccFindGeneralLedgerByQuery (Query *q)
|
|||||||
void
|
void
|
||||||
xaccLedgerDisplayRefresh (xaccLedgerDisplay *ld)
|
xaccLedgerDisplayRefresh (xaccLedgerDisplay *ld)
|
||||||
{
|
{
|
||||||
/* If we don't really need the redraw, don't do it. */
|
if (!ld)
|
||||||
if (!ld->dirty)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ld->dirty = FALSE; /* mark clean */
|
|
||||||
|
|
||||||
/* The leader account is used by the register gui to
|
/* The leader account is used by the register gui to
|
||||||
* assign a default source account for a "blank split"
|
* assign a default source account for a "blank split"
|
||||||
* that is attached to the bottom of the register.
|
* that is attached to the bottom of the register.
|
||||||
* The "blank split" is what the user edits to create
|
* The "blank split" is what the user edits to create
|
||||||
* new splits and get them into the system. */
|
* new splits and get them into the system. */
|
||||||
xaccSRLoadRegister (ld->reg, xaccQueryGetSplits (ld->query), ld->leader);
|
xaccSRLoadRegister (ld->reg,
|
||||||
|
xaccQueryGetSplits (ld->query),
|
||||||
|
xaccLedgerDisplayLeader (ld));
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
@ -558,9 +722,6 @@ MarkDirtyAllRegsClass (Account *account, const char *component_class)
|
|||||||
|
|
||||||
for (node = list; node; node = node->next)
|
for (node = list; node; node = node->next)
|
||||||
{
|
{
|
||||||
xaccLedgerDisplay *ld = node->data;
|
|
||||||
|
|
||||||
ld->dirty = TRUE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,37 +35,43 @@
|
|||||||
#include "Transaction.h"
|
#include "Transaction.h"
|
||||||
|
|
||||||
|
|
||||||
/** Structures ******************************************************/
|
/** Definitions *****************************************************/
|
||||||
|
|
||||||
/* The xaccLedgerDisplay struct describes a single register/ledger
|
/* The xaccLedgerDisplay struct describes a single register/ledger
|
||||||
* instance. */
|
* instance. */
|
||||||
typedef struct _xaccLedgerDisplay xaccLedgerDisplay;
|
typedef struct _xaccLedgerDisplay xaccLedgerDisplay;
|
||||||
|
|
||||||
struct _xaccLedgerDisplay
|
typedef void (*LedgerDisplayDestroy) (xaccLedgerDisplay *ld);
|
||||||
|
typedef gncUIWidget (*LedgerDisplayGetParent) (xaccLedgerDisplay *ld);
|
||||||
|
typedef void (*LedgerDisplaySetHelp) (xaccLedgerDisplay *ld,
|
||||||
|
const char *help_str);
|
||||||
|
|
||||||
|
typedef enum
|
||||||
{
|
{
|
||||||
Account *leader; /* leading. "master" account, if any */
|
LD_SINGLE,
|
||||||
GList *displayed_accounts; /* The list of accounts shown here */
|
LD_SUBACCOUNT,
|
||||||
Query *query; /* query engine & filter for displaying */
|
LD_GL
|
||||||
|
} LedgerDisplayType;
|
||||||
SplitRegisterType type; /* register display type, usually equal to *
|
|
||||||
* account type, but not always. */
|
|
||||||
|
|
||||||
/* GUI related stuff */
|
|
||||||
gboolean dirty; /* dirty flag, non zero if redraw needed */
|
|
||||||
|
|
||||||
SplitRegister *reg; /* main ledger window */
|
|
||||||
gpointer gui_hook; /* GUI-specific state */
|
|
||||||
|
|
||||||
void (*destroy) (xaccLedgerDisplay *); /* destroy callback */
|
|
||||||
gncUIWidget (*get_parent) (xaccLedgerDisplay *); /* get parent widget */
|
|
||||||
void (*set_help) (xaccLedgerDisplay *, const char *); /* help string */
|
|
||||||
|
|
||||||
gint component_id; /* id of ledger component */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/** Prototypes ******************************************************/
|
/** Prototypes ******************************************************/
|
||||||
|
|
||||||
|
/* returns the 'lead' account of a ledger display, or NULL if none. */
|
||||||
|
Account * xaccLedgerDisplayLeader (xaccLedgerDisplay *ld);
|
||||||
|
|
||||||
|
/* get and set the user data associated with the ledger */
|
||||||
|
void xaccLedgerDisplaySetUserData (xaccLedgerDisplay *ld, gpointer user_data);
|
||||||
|
gpointer xaccLedgerDisplayGetUserData (xaccLedgerDisplay *ld);
|
||||||
|
|
||||||
|
/* set the handlers used by the ledger display */
|
||||||
|
void xaccLedgerDisplaySetHandlers (xaccLedgerDisplay *ld,
|
||||||
|
LedgerDisplayDestroy destroy,
|
||||||
|
LedgerDisplayGetParent get_parent,
|
||||||
|
LedgerDisplaySetHelp set_help);
|
||||||
|
|
||||||
|
/* return the split register associated with a ledger display */
|
||||||
|
SplitRegister * xaccLedgerDisplayGetSR (xaccLedgerDisplay *ld);
|
||||||
|
|
||||||
/* opens up a register window to display a single account */
|
/* opens up a register window to display a single account */
|
||||||
xaccLedgerDisplay * xaccLedgerDisplaySimple (Account *account);
|
xaccLedgerDisplay * xaccLedgerDisplaySimple (Account *account);
|
||||||
|
|
||||||
@ -81,6 +87,9 @@ xaccLedgerDisplay * xaccLedgerDisplayQuery (Query *query,
|
|||||||
/* Set the query used for a register. */
|
/* Set the query used for a register. */
|
||||||
void xaccLedgerDisplaySetQuery (xaccLedgerDisplay *ledger_display, Query *q);
|
void xaccLedgerDisplaySetQuery (xaccLedgerDisplay *ledger_display, Query *q);
|
||||||
|
|
||||||
|
/* return the query associated with a ledger */
|
||||||
|
Query * xaccLedgerDisplayGetQuery (xaccLedgerDisplay *ld);
|
||||||
|
|
||||||
/* If the given ledger display still exists, return it. Otherwise,
|
/* If the given ledger display still exists, return it. Otherwise,
|
||||||
* return NULL */
|
* return NULL */
|
||||||
xaccLedgerDisplay * xaccFindGeneralLedgerByQuery (Query *q);
|
xaccLedgerDisplay * xaccFindGeneralLedgerByQuery (Query *q);
|
||||||
|
@ -225,7 +225,29 @@ gnc_cm_event_handler (GUID *entity,
|
|||||||
GNCEngineEventType event_type,
|
GNCEngineEventType event_type,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GNCIdType id_type;
|
||||||
|
|
||||||
add_event (&changes, entity, event_type, TRUE);
|
add_event (&changes, entity, event_type, TRUE);
|
||||||
|
|
||||||
|
id_type = xaccGUIDType (entity);
|
||||||
|
switch (id_type)
|
||||||
|
{
|
||||||
|
case GNC_ID_TRANS:
|
||||||
|
changes.trans_event_mask |= event_type;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GNC_ID_ACCOUNT:
|
||||||
|
changes.account_event_mask |= event_type;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GNC_ID_NONE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
PERR ("unexpected id type: %d", id_type);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
got_events = TRUE;
|
got_events = TRUE;
|
||||||
|
|
||||||
#if CM_DEBUG
|
#if CM_DEBUG
|
||||||
@ -557,43 +579,6 @@ changes_match (ComponentEventInfo *cei)
|
|||||||
return big_cei->match;
|
return big_cei->match;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
compile_helper (gpointer key, gpointer value, gpointer user_data)
|
|
||||||
{
|
|
||||||
GUID *guid = key;
|
|
||||||
EventInfo *info = value;
|
|
||||||
ComponentEventInfo *cei = user_data;
|
|
||||||
GNCIdType id_type;
|
|
||||||
|
|
||||||
id_type = xaccGUIDType (guid);
|
|
||||||
switch (id_type)
|
|
||||||
{
|
|
||||||
case GNC_ID_TRANS:
|
|
||||||
cei->trans_event_mask |= info->event_mask;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GNC_ID_ACCOUNT:
|
|
||||||
cei->account_event_mask |= info->event_mask;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GNC_ID_NONE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
PERR ("unexpected id type: %d", id_type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
compile_changes (ComponentEventInfo *cei)
|
|
||||||
{
|
|
||||||
if (!cei)
|
|
||||||
return;
|
|
||||||
|
|
||||||
g_hash_table_foreach (cei->entity_events, compile_helper, cei);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_gui_refresh_internal (gboolean force)
|
gnc_gui_refresh_internal (gboolean force)
|
||||||
{
|
{
|
||||||
@ -607,9 +592,6 @@ gnc_gui_refresh_internal (gboolean force)
|
|||||||
if (!got_events)
|
if (!got_events)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!force)
|
|
||||||
compile_changes (&changes);
|
|
||||||
|
|
||||||
list = find_component_ids_by_class (NULL);
|
list = find_component_ids_by_class (NULL);
|
||||||
|
|
||||||
for (node = list; node; node = node->next)
|
for (node = list; node; node = node->next)
|
||||||
|
@ -88,8 +88,8 @@ gnc_ui_find_transactions_dialog_create(xaccLedgerDisplay * orig_ledg) {
|
|||||||
ftd->dialog = create_Find_Transactions();
|
ftd->dialog = create_Find_Transactions();
|
||||||
|
|
||||||
if(orig_ledg) {
|
if(orig_ledg) {
|
||||||
ftd->q = xaccQueryCopy (orig_ledg->query);
|
ftd->q = xaccQueryCopy (xaccLedgerDisplayGetQuery (orig_ledg));
|
||||||
ftd->ledger_q = orig_ledg->query;
|
ftd->ledger_q = xaccLedgerDisplayGetQuery (orig_ledg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ftd->q = NULL;
|
ftd->q = NULL;
|
||||||
@ -589,7 +589,6 @@ gnc_ui_find_transactions_dialog_ok_cb(GtkButton * button,
|
|||||||
|
|
||||||
xaccFreeQuery (new_q);
|
xaccFreeQuery (new_q);
|
||||||
|
|
||||||
ledger->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh(ledger);
|
xaccLedgerDisplayRefresh(ledger);
|
||||||
|
|
||||||
if (new_ledger)
|
if (new_ledger)
|
||||||
|
@ -716,7 +716,9 @@ gnc_xfer_dialog_ok_cb(GtkWidget * widget, gpointer data)
|
|||||||
|
|
||||||
to_amount = gnc_amount_edit_get_amount
|
to_amount = gnc_amount_edit_get_amount
|
||||||
(GNC_AMOUNT_EDIT(xferData->to_amount_edit));
|
(GNC_AMOUNT_EDIT(xferData->to_amount_edit));
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
/* from -> curr transaction */
|
/* from -> curr transaction */
|
||||||
/* Create the transaction */
|
/* Create the transaction */
|
||||||
trans = xaccMallocTransaction();
|
trans = xaccMallocTransaction();
|
||||||
@ -801,9 +803,12 @@ gnc_xfer_dialog_ok_cb(GtkWidget * widget, gpointer data)
|
|||||||
gnc_account_ui_refresh(to);
|
gnc_account_ui_refresh(to);
|
||||||
gnc_account_ui_refresh(from);
|
gnc_account_ui_refresh(from);
|
||||||
gnc_account_ui_refresh(curr);
|
gnc_account_ui_refresh(curr);
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
/* Create the transaction */
|
/* Create the transaction */
|
||||||
trans = xaccMallocTransaction();
|
trans = xaccMallocTransaction();
|
||||||
|
|
||||||
@ -850,6 +855,7 @@ gnc_xfer_dialog_ok_cb(GtkWidget * widget, gpointer data)
|
|||||||
/* Refresh everything */
|
/* Refresh everything */
|
||||||
gnc_account_ui_refresh(to);
|
gnc_account_ui_refresh(to);
|
||||||
gnc_account_ui_refresh(from);
|
gnc_account_ui_refresh(from);
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
gnc_refresh_main_window();
|
gnc_refresh_main_window();
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#include "file-history.h"
|
#include "file-history.h"
|
||||||
#include "global-options.h"
|
#include "global-options.h"
|
||||||
#include "gnc-commodity.h"
|
#include "gnc-commodity.h"
|
||||||
|
#include "gnc-component-manager.h"
|
||||||
#include "gnc-engine-util.h"
|
#include "gnc-engine-util.h"
|
||||||
#include "gnc-engine.h"
|
#include "gnc-engine.h"
|
||||||
#include "gnc-ui.h"
|
#include "gnc-ui.h"
|
||||||
@ -542,19 +543,16 @@ gnc_ui_add_account (GtkWidget *widget, gpointer data)
|
|||||||
static void
|
static void
|
||||||
gnc_ui_delete_account (Account *account)
|
gnc_ui_delete_account (Account *account)
|
||||||
{
|
{
|
||||||
/* Step 1: Delete associated windows */
|
xaccAccountWindowDestroy (account);
|
||||||
xaccAccountWindowDestroy(account);
|
|
||||||
|
|
||||||
/* Step 2: Remove the account from all trees */
|
gnc_suspend_gui_refresh ();
|
||||||
gnc_account_tree_remove_account_all(account);
|
|
||||||
|
|
||||||
/* Step 3: Delete the actual account */
|
xaccRemoveAccount (account);
|
||||||
xaccRemoveAccount(account);
|
xaccFreeAccount (account);
|
||||||
xaccFreeAccount(account);
|
|
||||||
|
|
||||||
/* Step 4: Refresh things */
|
gnc_refresh_main_window ();
|
||||||
gnc_refresh_main_window();
|
gnc_group_ui_refresh (gncGetCurrentGroup ());
|
||||||
gnc_group_ui_refresh(gncGetCurrentGroup());
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -681,11 +679,14 @@ gnc_ui_mainWindow_scrub(GtkWidget *widget, gpointer data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
xaccAccountScrubOrphans(account);
|
xaccAccountScrubOrphans(account);
|
||||||
xaccAccountScrubImbalance(account);
|
xaccAccountScrubImbalance(account);
|
||||||
|
|
||||||
gnc_account_ui_refresh(account);
|
gnc_account_ui_refresh(account);
|
||||||
gnc_refresh_main_window();
|
gnc_refresh_main_window();
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -700,11 +701,14 @@ gnc_ui_mainWindow_scrub_sub(GtkWidget *widget, gpointer data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
xaccAccountTreeScrubOrphans(account);
|
xaccAccountTreeScrubOrphans(account);
|
||||||
xaccAccountTreeScrubImbalance(account);
|
xaccAccountTreeScrubImbalance(account);
|
||||||
|
|
||||||
gnc_account_ui_refresh(account);
|
gnc_account_ui_refresh(account);
|
||||||
gnc_refresh_main_window();
|
gnc_refresh_main_window();
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -712,11 +716,14 @@ gnc_ui_mainWindow_scrub_all(GtkWidget *widget, gpointer data)
|
|||||||
{
|
{
|
||||||
AccountGroup *group = gncGetCurrentGroup();
|
AccountGroup *group = gncGetCurrentGroup();
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
xaccGroupScrubOrphans(group);
|
xaccGroupScrubOrphans(group);
|
||||||
xaccGroupScrubImbalance(group);
|
xaccGroupScrubImbalance(group);
|
||||||
|
|
||||||
gnc_group_ui_refresh(group);
|
gnc_group_ui_refresh(group);
|
||||||
gnc_refresh_main_window();
|
gnc_refresh_main_window();
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -728,7 +735,7 @@ gnc_ui_options_cb(GtkWidget *widget, gpointer data)
|
|||||||
static void
|
static void
|
||||||
gnc_ui_filemenu_cb(GtkWidget *widget, gpointer menuItem)
|
gnc_ui_filemenu_cb(GtkWidget *widget, gpointer menuItem)
|
||||||
{
|
{
|
||||||
switch(GPOINTER_TO_INT(menuItem))
|
switch (GPOINTER_TO_INT(menuItem))
|
||||||
{
|
{
|
||||||
case FMB_NEW:
|
case FMB_NEW:
|
||||||
gncFileNew();
|
gncFileNew();
|
||||||
@ -887,7 +894,6 @@ gnc_configure_account_tree(void *data)
|
|||||||
|
|
||||||
memset(&new_avi, 0, sizeof(new_avi));
|
memset(&new_avi, 0, sizeof(new_avi));
|
||||||
|
|
||||||
|
|
||||||
info = gnc_get_main_info();
|
info = gnc_get_main_info();
|
||||||
tree = GNC_MAINWIN_ACCOUNT_TREE(info->account_tree);
|
tree = GNC_MAINWIN_ACCOUNT_TREE(info->account_tree);
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ recn_get_account (RecnWindow *recnData)
|
|||||||
* and the 'effective' ending balance. *
|
* and the 'effective' ending balance. *
|
||||||
\********************************************************************/
|
\********************************************************************/
|
||||||
static gnc_numeric
|
static gnc_numeric
|
||||||
recnRecalculateBalance(RecnWindow *recnData)
|
recnRecalculateBalance (RecnWindow *recnData)
|
||||||
{
|
{
|
||||||
Account *account;
|
Account *account;
|
||||||
const char *amount;
|
const char *amount;
|
||||||
@ -323,7 +323,7 @@ startRecnWindow(GtkWidget *parent, Account *account,
|
|||||||
*new_ending = gnc_numeric_neg (*new_ending);
|
*new_ending = gnc_numeric_neg (*new_ending);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the dialog box... */
|
/* Create the dialog box */
|
||||||
title = gnc_recn_make_window_name(account);
|
title = gnc_recn_make_window_name(account);
|
||||||
|
|
||||||
dialog = gnome_dialog_new(title,
|
dialog = gnome_dialog_new(title,
|
||||||
@ -836,11 +836,14 @@ gnc_recn_scrub_cb(GtkWidget *widget, gpointer data)
|
|||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
xaccAccountTreeScrubOrphans (account);
|
xaccAccountTreeScrubOrphans (account);
|
||||||
xaccAccountTreeScrubImbalance (account);
|
xaccAccountTreeScrubImbalance (account);
|
||||||
|
|
||||||
gnc_account_ui_refresh (account);
|
gnc_account_ui_refresh (account);
|
||||||
gnc_refresh_main_window ();
|
gnc_refresh_main_window ();
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1661,7 +1664,10 @@ recn_destroy_cb (GtkWidget *w, gpointer data)
|
|||||||
gnc_unregister_option_change_callback_id (id);
|
gnc_unregister_option_change_callback_id (id);
|
||||||
|
|
||||||
if (recnData->delete_refresh)
|
if (recnData->delete_refresh)
|
||||||
|
{
|
||||||
gnc_account_ui_refresh (recn_get_account (recnData));
|
gnc_account_ui_refresh (recn_get_account (recnData));
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
|
}
|
||||||
|
|
||||||
g_free (recnData);
|
g_free (recnData);
|
||||||
}
|
}
|
||||||
@ -1679,21 +1685,22 @@ recn_destroy_cb (GtkWidget *w, gpointer data)
|
|||||||
static Account *
|
static Account *
|
||||||
find_payment_account(Account *account)
|
find_payment_account(Account *account)
|
||||||
{
|
{
|
||||||
int i;
|
GList *list;
|
||||||
|
GList *node;
|
||||||
|
|
||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
i = xaccAccountGetNumSplits(account);
|
list = xaccAccountGetSplitList (account);
|
||||||
|
|
||||||
/* Search backwards to find the latest payment */
|
/* Search backwards to find the latest payment */
|
||||||
for (i -= 1; i >= 0; i--)
|
for (node = g_list_last (list); node; node = node->prev)
|
||||||
{
|
{
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
Split *split;
|
Split *split;
|
||||||
int num_splits;
|
GList *n;
|
||||||
int j;
|
|
||||||
|
|
||||||
split = xaccAccountGetSplit(account, i);
|
split = node->data;
|
||||||
if (split == NULL)
|
if (split == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1705,14 +1712,13 @@ find_payment_account(Account *account)
|
|||||||
if (trans == NULL)
|
if (trans == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
num_splits = xaccTransCountSplits(trans);
|
for (n = xaccTransGetSplitList (trans); n; n = n->next)
|
||||||
for (j = 0; j < num_splits; j++)
|
|
||||||
{
|
{
|
||||||
GNCAccountType type;
|
GNCAccountType type;
|
||||||
Account *a;
|
Account *a;
|
||||||
Split *s;
|
Split *s;
|
||||||
|
|
||||||
s = xaccTransGetSplit(trans, j);
|
s = n->data;
|
||||||
if ((s == NULL) || (s == split))
|
if ((s == NULL) || (s == split))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1756,6 +1762,8 @@ recnFinishCB (GtkWidget *w, gpointer data)
|
|||||||
|
|
||||||
date = recnData->statement_date;
|
date = recnData->statement_date;
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
gnc_reconcile_list_commit(GNC_RECONCILE_LIST(recnData->credit), date);
|
gnc_reconcile_list_commit(GNC_RECONCILE_LIST(recnData->credit), date);
|
||||||
gnc_reconcile_list_commit(GNC_RECONCILE_LIST(recnData->debit), date);
|
gnc_reconcile_list_commit(GNC_RECONCILE_LIST(recnData->debit), date);
|
||||||
|
|
||||||
|
@ -30,28 +30,29 @@
|
|||||||
|
|
||||||
#include <gnome.h>
|
#include <gnome.h>
|
||||||
|
|
||||||
#include "window-register.h"
|
#include "AccWindow.h"
|
||||||
#include "gnc-ui.h"
|
#include "EuroUtils.h"
|
||||||
#include "MultiLedger.h"
|
|
||||||
#include "MainWindow.h"
|
#include "MainWindow.h"
|
||||||
|
#include "MultiLedger.h"
|
||||||
#include "Refresh.h"
|
#include "Refresh.h"
|
||||||
#include "RegWindow.h"
|
#include "RegWindow.h"
|
||||||
#include "Scrub.h"
|
#include "Scrub.h"
|
||||||
#include "window-reconcile.h"
|
#include "dialog-find-transactions.h"
|
||||||
#include "AccWindow.h"
|
|
||||||
#include "window-help.h"
|
|
||||||
#include "dialog-transfer.h"
|
#include "dialog-transfer.h"
|
||||||
#include "dialog-utils.h"
|
#include "dialog-utils.h"
|
||||||
#include "query-user.h"
|
|
||||||
#include "messages.h"
|
|
||||||
#include "table-allgui.h"
|
|
||||||
#include "gnucash-sheet.h"
|
|
||||||
#include "global-options.h"
|
#include "global-options.h"
|
||||||
#include "dialog-find-transactions.h"
|
#include "gnc-component-manager.h"
|
||||||
#include "gnc-dateedit.h"
|
#include "gnc-dateedit.h"
|
||||||
#include "gnc-engine-util.h"
|
#include "gnc-engine-util.h"
|
||||||
#include "gnc-ui-util.h"
|
#include "gnc-ui-util.h"
|
||||||
#include "EuroUtils.h"
|
#include "gnc-ui.h"
|
||||||
|
#include "gnucash-sheet.h"
|
||||||
|
#include "messages.h"
|
||||||
|
#include "query-user.h"
|
||||||
|
#include "table-allgui.h"
|
||||||
|
#include "window-help.h"
|
||||||
|
#include "window-reconcile.h"
|
||||||
|
#include "window-register.h"
|
||||||
|
|
||||||
|
|
||||||
typedef struct _RegDateWindow RegDateWindow;
|
typedef struct _RegDateWindow RegDateWindow;
|
||||||
@ -217,16 +218,18 @@ gnc_register_jump_to_split(RegWindow *regData, Split *split)
|
|||||||
{
|
{
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
VirtualCellLocation vcell_loc;
|
VirtualCellLocation vcell_loc;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
trans = xaccSplitGetParent(split);
|
trans = xaccSplitGetParent(split);
|
||||||
if (trans != NULL)
|
if (trans != NULL)
|
||||||
if (gnc_register_include_date(regData, xaccTransGetDate(trans)))
|
if (gnc_register_include_date(regData, xaccTransGetDate(trans)))
|
||||||
{
|
{
|
||||||
regData->ledger->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh(regData->ledger);
|
xaccLedgerDisplayRefresh(regData->ledger);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xaccSRGetSplitVirtLoc(regData->ledger->reg, split, &vcell_loc))
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
if (xaccSRGetSplitVirtLoc(reg, split, &vcell_loc))
|
||||||
gnucash_register_goto_virt_cell(regData->reg, vcell_loc);
|
gnucash_register_goto_virt_cell(regData->reg, vcell_loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,16 +247,18 @@ gnc_register_jump_to_split_amount(RegWindow *regData, Split *split)
|
|||||||
{
|
{
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
VirtualLocation virt_loc;
|
VirtualLocation virt_loc;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
trans = xaccSplitGetParent(split);
|
trans = xaccSplitGetParent(split);
|
||||||
if (trans != NULL)
|
if (trans != NULL)
|
||||||
if (gnc_register_include_date(regData, xaccTransGetDate(trans)))
|
if (gnc_register_include_date(regData, xaccTransGetDate(trans)))
|
||||||
{
|
{
|
||||||
regData->ledger->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh (regData->ledger);
|
xaccLedgerDisplayRefresh (regData->ledger);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xaccSRGetSplitAmountVirtLoc(regData->ledger->reg, split, &virt_loc))
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
if (xaccSRGetSplitAmountVirtLoc(reg, split, &virt_loc))
|
||||||
gnucash_register_goto_virt_loc(regData->reg, virt_loc);
|
gnucash_register_goto_virt_loc(regData->reg, virt_loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,14 +266,13 @@ gnc_register_jump_to_split_amount(RegWindow *regData, Split *split)
|
|||||||
static void
|
static void
|
||||||
gnc_register_change_style (RegWindow *regData, SplitRegisterStyle style)
|
gnc_register_change_style (RegWindow *regData, SplitRegisterStyle style)
|
||||||
{
|
{
|
||||||
SplitRegister *reg = regData->ledger->reg;
|
SplitRegister *reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
if (style == reg->style)
|
if (style == reg->style)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xaccConfigSplitRegister (reg, reg->type, style, reg->use_double_line);
|
xaccConfigSplitRegister (reg, reg->type, style, reg->use_double_line);
|
||||||
|
|
||||||
regData->ledger->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh (regData->ledger);
|
xaccLedgerDisplayRefresh (regData->ledger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +313,7 @@ static void
|
|||||||
gnc_register_double_line_cb (GtkWidget *w, gpointer data)
|
gnc_register_double_line_cb (GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
SplitRegister *reg = regData->ledger->reg;
|
SplitRegister *reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
gboolean use_double_line;
|
gboolean use_double_line;
|
||||||
|
|
||||||
use_double_line = GTK_CHECK_MENU_ITEM(w)->active;
|
use_double_line = GTK_CHECK_MENU_ITEM(w)->active;
|
||||||
@ -317,17 +321,17 @@ gnc_register_double_line_cb (GtkWidget *w, gpointer data)
|
|||||||
if (use_double_line == reg->use_double_line)
|
if (use_double_line == reg->use_double_line)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xaccConfigSplitRegister(reg, reg->type, reg->style, use_double_line);
|
xaccConfigSplitRegister (reg, reg->type, reg->style, use_double_line);
|
||||||
|
|
||||||
regData->ledger->dirty = TRUE;
|
xaccLedgerDisplayRefresh (regData->ledger);
|
||||||
xaccLedgerDisplayRefresh(regData->ledger);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_register_sort(RegWindow *regData, sort_type_t sort_code)
|
gnc_register_sort (RegWindow *regData, sort_type_t sort_code)
|
||||||
{
|
{
|
||||||
Query *query = regData->ledger->query;
|
Query *query = xaccLedgerDisplayGetQuery (regData->ledger);
|
||||||
gboolean show_present_divider = FALSE;
|
gboolean show_present_divider = FALSE;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
if (regData->sort_type == sort_code)
|
if (regData->sort_type == sort_code)
|
||||||
return;
|
return;
|
||||||
@ -365,11 +369,12 @@ gnc_register_sort(RegWindow *regData, sort_type_t sort_code)
|
|||||||
assert(0); /* we should never be here */
|
assert(0); /* we should never be here */
|
||||||
}
|
}
|
||||||
|
|
||||||
xaccSRShowPresentDivider (regData->ledger->reg, show_present_divider);
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
xaccSRShowPresentDivider (reg, show_present_divider);
|
||||||
|
|
||||||
regData->sort_type = sort_code;
|
regData->sort_type = sort_code;
|
||||||
|
|
||||||
regData->ledger->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh(regData->ledger);
|
xaccLedgerDisplayRefresh(regData->ledger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,10 +479,17 @@ gnc_date_range_set_sensitivities(RegWindow *regData)
|
|||||||
{
|
{
|
||||||
RegDateWindow *regDateData;
|
RegDateWindow *regDateData;
|
||||||
GtkToggleButton *toggle;
|
GtkToggleButton *toggle;
|
||||||
|
Query *query;
|
||||||
|
|
||||||
assert(regData != NULL);
|
if (!regData)
|
||||||
assert(regData->ledger != NULL);
|
return;
|
||||||
assert(regData->ledger->query != NULL);
|
|
||||||
|
if (!regData->ledger)
|
||||||
|
return;
|
||||||
|
|
||||||
|
query = xaccLedgerDisplayGetQuery (regData->ledger);
|
||||||
|
if (!query)
|
||||||
|
return;
|
||||||
|
|
||||||
regDateData = regData->date_window;
|
regDateData = regData->date_window;
|
||||||
if (regDateData == NULL)
|
if (regDateData == NULL)
|
||||||
@ -507,10 +519,17 @@ gnc_register_set_date_range(RegWindow *regData)
|
|||||||
{
|
{
|
||||||
RegDateWindow *regDateData;
|
RegDateWindow *regDateData;
|
||||||
GtkToggleButton *toggle;
|
GtkToggleButton *toggle;
|
||||||
|
Query *query;
|
||||||
|
|
||||||
assert(regData != NULL);
|
if (!regData)
|
||||||
assert(regData->ledger != NULL);
|
return;
|
||||||
assert(regData->ledger->query != NULL);
|
|
||||||
|
if (!regData->ledger)
|
||||||
|
return;
|
||||||
|
|
||||||
|
query = xaccLedgerDisplayGetQuery (regData->ledger);
|
||||||
|
if (!query)
|
||||||
|
return;
|
||||||
|
|
||||||
regDateData = regData->date_window;
|
regDateData = regData->date_window;
|
||||||
if (regDateData == NULL)
|
if (regDateData == NULL)
|
||||||
@ -520,28 +539,30 @@ gnc_register_set_date_range(RegWindow *regData)
|
|||||||
|
|
||||||
toggle = GTK_TOGGLE_BUTTON(regDateData->show_earliest);
|
toggle = GTK_TOGGLE_BUTTON(regDateData->show_earliest);
|
||||||
|
|
||||||
xaccQueryPurgeTerms(regData->ledger->query, PD_DATE);
|
xaccQueryPurgeTerms (query, PD_DATE);
|
||||||
|
|
||||||
if (!gtk_toggle_button_get_active(toggle)) {
|
if (!gtk_toggle_button_get_active(toggle))
|
||||||
|
{
|
||||||
time_t start;
|
time_t start;
|
||||||
|
|
||||||
start = gnc_date_edit_get_date(GNC_DATE_EDIT(regDateData->start_date));
|
start = gnc_date_edit_get_date(GNC_DATE_EDIT(regDateData->start_date));
|
||||||
start = gnc_register_min_day_time(start);
|
start = gnc_register_min_day_time(start);
|
||||||
|
|
||||||
xaccQueryAddDateMatchTT(regData->ledger->query,
|
xaccQueryAddDateMatchTT(query,
|
||||||
TRUE, start,
|
TRUE, start,
|
||||||
FALSE, 0,
|
FALSE, 0,
|
||||||
QUERY_AND);
|
QUERY_AND);
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle = GTK_TOGGLE_BUTTON(regDateData->show_latest);
|
toggle = GTK_TOGGLE_BUTTON(regDateData->show_latest);
|
||||||
if (!gtk_toggle_button_get_active(toggle)) {
|
if (!gtk_toggle_button_get_active(toggle))
|
||||||
|
{
|
||||||
time_t end;
|
time_t end;
|
||||||
|
|
||||||
end = gnc_date_edit_get_date(GNC_DATE_EDIT(regDateData->end_date));
|
end = gnc_date_edit_get_date(GNC_DATE_EDIT(regDateData->end_date));
|
||||||
end = gnc_register_max_day_time(end);
|
end = gnc_register_max_day_time(end);
|
||||||
|
|
||||||
xaccQueryAddDateMatchTT(regData->ledger->query,
|
xaccQueryAddDateMatchTT(query,
|
||||||
FALSE, 0,
|
FALSE, 0,
|
||||||
TRUE, end,
|
TRUE, end,
|
||||||
QUERY_AND);
|
QUERY_AND);
|
||||||
@ -557,7 +578,6 @@ gnc_register_date_cb(GtkWidget *widget, gpointer data)
|
|||||||
|
|
||||||
gnc_register_set_date_range(regData);
|
gnc_register_set_date_range(regData);
|
||||||
|
|
||||||
regData->ledger->dirty = TRUE;
|
|
||||||
xaccLedgerDisplayRefresh (regData->ledger);
|
xaccLedgerDisplayRefresh (regData->ledger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -711,7 +731,8 @@ gnc_register_date_window(RegWindow *regData)
|
|||||||
gtk_box_pack_start(GTK_BOX(hbox), date, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), date, FALSE, FALSE, 0);
|
||||||
regDateData->start_date = date;
|
regDateData->start_date = date;
|
||||||
|
|
||||||
time_val = xaccQueryGetEarliestDateFound(regData->ledger->query);
|
time_val = xaccQueryGetEarliestDateFound
|
||||||
|
(xaccLedgerDisplayGetQuery (regData->ledger));
|
||||||
if (time_val < time(NULL))
|
if (time_val < time(NULL))
|
||||||
gnc_date_edit_set_time(GNC_DATE_EDIT(date), time_val);
|
gnc_date_edit_set_time(GNC_DATE_EDIT(date), time_val);
|
||||||
|
|
||||||
@ -904,10 +925,13 @@ gnc_register_create_tool_bar (RegWindow *regData)
|
|||||||
static void
|
static void
|
||||||
gnc_ui_find_transactions_cb (GtkWidget *widget, gpointer data)
|
gnc_ui_find_transactions_cb (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow * regdata = data;
|
RegWindow * regData = data;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
if (regdata->ledger->type == SEARCH_LEDGER)
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
gnc_ui_find_transactions_dialog_create (regdata->ledger);
|
|
||||||
|
if (reg->type == SEARCH_LEDGER)
|
||||||
|
gnc_ui_find_transactions_dialog_create (regData->ledger);
|
||||||
else
|
else
|
||||||
gnc_ui_find_transactions_dialog_create (NULL);
|
gnc_ui_find_transactions_dialog_create (NULL);
|
||||||
}
|
}
|
||||||
@ -916,6 +940,7 @@ gnc_ui_find_transactions_cb (GtkWidget *widget, gpointer data)
|
|||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
gnc_register_create_status_bar(RegWindow *regData)
|
gnc_register_create_status_bar(RegWindow *regData)
|
||||||
{
|
{
|
||||||
|
SplitRegister *reg;
|
||||||
GtkWidget *statusbar;
|
GtkWidget *statusbar;
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
@ -926,7 +951,9 @@ gnc_register_create_status_bar(RegWindow *regData)
|
|||||||
|
|
||||||
regData->statusbar = statusbar;
|
regData->statusbar = statusbar;
|
||||||
|
|
||||||
switch (regData->ledger->type)
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
switch (reg->type)
|
||||||
{
|
{
|
||||||
case GENERAL_LEDGER:
|
case GENERAL_LEDGER:
|
||||||
case INCOME_LEDGER:
|
case INCOME_LEDGER:
|
||||||
@ -970,15 +997,15 @@ gnc_register_create_status_bar(RegWindow *regData)
|
|||||||
void
|
void
|
||||||
gnc_register_jump_to_blank(RegWindow *regData)
|
gnc_register_jump_to_blank(RegWindow *regData)
|
||||||
{
|
{
|
||||||
SplitRegister *sr = regData->ledger->reg;
|
SplitRegister *reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
Split *blank;
|
Split *blank;
|
||||||
VirtualCellLocation vcell_loc;
|
VirtualCellLocation vcell_loc;
|
||||||
|
|
||||||
blank = xaccSRGetBlankSplit(sr);
|
blank = xaccSRGetBlankSplit(reg);
|
||||||
if (blank == NULL)
|
if (blank == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (xaccSRGetSplitVirtLoc(sr, blank, &vcell_loc))
|
if (xaccSRGetSplitVirtLoc(reg, blank, &vcell_loc))
|
||||||
gnucash_register_goto_virt_cell(regData->reg, vcell_loc);
|
gnucash_register_goto_virt_cell(regData->reg, vcell_loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -988,13 +1015,16 @@ expand_trans_check_cb (GtkWidget *widget, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
gboolean expand;
|
gboolean expand;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
if (!regData)
|
if (!regData)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
expand = GTK_CHECK_MENU_ITEM (widget)->active;
|
expand = GTK_CHECK_MENU_ITEM (widget)->active;
|
||||||
|
|
||||||
xaccSRExpandCurrentTrans (regData->ledger->reg, expand);
|
xaccSRExpandCurrentTrans (reg, expand);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1002,36 +1032,46 @@ expand_trans_cb (GtkWidget *widget, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
gboolean expand;
|
gboolean expand;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
expand = GTK_TOGGLE_BUTTON (widget)->active;
|
expand = GTK_TOGGLE_BUTTON (widget)->active;
|
||||||
|
|
||||||
xaccSRExpandCurrentTrans (regData->ledger->reg, expand);
|
xaccSRExpandCurrentTrans (reg, expand);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
new_trans_cb(GtkWidget *widget, gpointer data)
|
new_trans_cb(GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
if (xaccSRCheckReconciled (regData->ledger->reg))
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
if (xaccSRCheckReconciled (reg))
|
||||||
{
|
{
|
||||||
if (xaccSRSaveRegEntry (regData->ledger->reg, TRUE))
|
if (xaccSRSaveRegEntry (reg, TRUE))
|
||||||
xaccSRRedrawReg (regData->ledger->reg);
|
xaccSRRedrawReg (reg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
xaccSRCancelCursorTransChanges (regData->ledger->reg);
|
xaccSRCancelCursorTransChanges (reg);
|
||||||
|
|
||||||
gnc_register_jump_to_blank(regData);
|
gnc_register_jump_to_blank (regData);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
jump_cb(GtkWidget *widget, gpointer data)
|
jump_cb(GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
SplitRegister *reg;
|
||||||
Account *account;
|
Account *account;
|
||||||
|
Account *leader;
|
||||||
Split *split;
|
Split *split;
|
||||||
|
|
||||||
split = xaccSRGetCurrentSplit(regData->ledger->reg);
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
split = xaccSRGetCurrentSplit (reg);
|
||||||
if (split == NULL)
|
if (split == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1039,7 +1079,9 @@ jump_cb(GtkWidget *widget, gpointer data)
|
|||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (account == regData->ledger->leader)
|
leader = xaccLedgerDisplayLeader (regData->ledger);
|
||||||
|
|
||||||
|
if (account == leader)
|
||||||
{
|
{
|
||||||
split = xaccGetOtherSplit(split);
|
split = xaccGetOtherSplit(split);
|
||||||
if (split == NULL)
|
if (split == NULL)
|
||||||
@ -1048,7 +1090,7 @@ jump_cb(GtkWidget *widget, gpointer data)
|
|||||||
account = xaccSplitGetAccount(split);
|
account = xaccSplitGetAccount(split);
|
||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return;
|
return;
|
||||||
if (account == regData->ledger->leader)
|
if (account == leader)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1056,21 +1098,22 @@ jump_cb(GtkWidget *widget, gpointer data)
|
|||||||
if (regData == NULL)
|
if (regData == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gnc_register_raise(regData);
|
gnc_register_raise (regData);
|
||||||
gnc_register_jump_to_split(regData, split);
|
gnc_register_jump_to_split (regData, split);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_check_cb(GtkWidget * widget, gpointer data)
|
print_check_cb(GtkWidget * widget, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow * reg_data = data;
|
RegWindow * reg_data = data;
|
||||||
Split * split = xaccSRGetCurrentSplit(reg_data->ledger->reg);
|
SplitRegister * reg = xaccLedgerDisplayGetSR (reg_data->ledger);
|
||||||
Transaction * trans = xaccSplitGetParent(split);
|
Split * split = xaccSRGetCurrentSplit(reg);
|
||||||
|
Transaction * trans = xaccSplitGetParent(split);
|
||||||
|
|
||||||
const char * payee;
|
const char * payee;
|
||||||
const char * memo;
|
const char * memo;
|
||||||
gnc_numeric amount;
|
gnc_numeric amount;
|
||||||
time_t date;
|
time_t date;
|
||||||
|
|
||||||
SCM print_check = gh_eval_str("gnc:print-check");
|
SCM print_check = gh_eval_str("gnc:print-check");
|
||||||
|
|
||||||
@ -1096,16 +1139,19 @@ static void
|
|||||||
gnc_register_scrub_cb(GtkWidget *widget, gpointer data)
|
gnc_register_scrub_cb(GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
Account *account = regData->ledger->leader;
|
Account *account = xaccLedgerDisplayLeader (regData->ledger);
|
||||||
|
|
||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
gnc_suspend_gui_refresh ();
|
||||||
|
|
||||||
xaccAccountTreeScrubOrphans(account);
|
xaccAccountTreeScrubOrphans(account);
|
||||||
xaccAccountTreeScrubImbalance(account);
|
xaccAccountTreeScrubImbalance(account);
|
||||||
|
|
||||||
gnc_account_ui_refresh(account);
|
gnc_account_ui_refresh(account);
|
||||||
gnc_refresh_main_window();
|
gnc_refresh_main_window();
|
||||||
|
gnc_resume_gui_refresh ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
@ -1413,10 +1459,13 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar)
|
|||||||
|
|
||||||
/* Make sure the right style radio item is active */
|
/* Make sure the right style radio item is active */
|
||||||
{
|
{
|
||||||
|
SplitRegister *reg;
|
||||||
GtkWidget *widget;
|
GtkWidget *widget;
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
switch (regData->ledger->reg->style)
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
switch (reg->style)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case REG_STYLE_LEDGER:
|
case REG_STYLE_LEDGER:
|
||||||
@ -1431,7 +1480,7 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* registers with more than one account can only use journal mode */
|
/* registers with more than one account can only use journal mode */
|
||||||
if (regData->ledger->reg->type >= NUM_SINGLE_REGISTER_TYPES)
|
if (reg->type >= NUM_SINGLE_REGISTER_TYPES)
|
||||||
{
|
{
|
||||||
widget = style_list[0].widget;
|
widget = style_list[0].widget;
|
||||||
gtk_widget_set_sensitive (widget, FALSE);
|
gtk_widget_set_sensitive (widget, FALSE);
|
||||||
@ -1549,7 +1598,7 @@ gnc_register_record_cb(GnucashRegister *reg, gpointer data)
|
|||||||
* when you are entering transactions. */
|
* when you are entering transactions. */
|
||||||
if (!goto_blank)
|
if (!goto_blank)
|
||||||
{
|
{
|
||||||
SplitRegister *sr = regData->ledger->reg;
|
SplitRegister *sr = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
SplitRegisterStyle style = sr->style;
|
SplitRegisterStyle style = sr->style;
|
||||||
|
|
||||||
if (style == REG_STYLE_LEDGER)
|
if (style == REG_STYLE_LEDGER)
|
||||||
@ -1617,12 +1666,8 @@ gnc_register_destroy_cb(GtkWidget *widget, gpointer data)
|
|||||||
static gncUIWidget
|
static gncUIWidget
|
||||||
gnc_register_get_parent(xaccLedgerDisplay *ledger)
|
gnc_register_get_parent(xaccLedgerDisplay *ledger)
|
||||||
{
|
{
|
||||||
RegWindow *regData;
|
RegWindow *regData = xaccLedgerDisplayGetUserData (ledger);
|
||||||
|
|
||||||
if (ledger == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
regData = ledger->gui_hook;
|
|
||||||
if (regData == NULL)
|
if (regData == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1632,6 +1677,7 @@ gnc_register_get_parent(xaccLedgerDisplay *ledger)
|
|||||||
static void
|
static void
|
||||||
gnc_reg_set_window_name(RegWindow *regData)
|
gnc_reg_set_window_name(RegWindow *regData)
|
||||||
{
|
{
|
||||||
|
SplitRegister *reg;
|
||||||
Account *leader;
|
Account *leader;
|
||||||
gchar *windowname;
|
gchar *windowname;
|
||||||
gchar *account_name;
|
gchar *account_name;
|
||||||
@ -1641,7 +1687,9 @@ gnc_reg_set_window_name(RegWindow *regData)
|
|||||||
if (regData == NULL)
|
if (regData == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (regData->ledger->type)
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
switch (reg->type)
|
||||||
{
|
{
|
||||||
case GENERAL_LEDGER:
|
case GENERAL_LEDGER:
|
||||||
case INCOME_LEDGER:
|
case INCOME_LEDGER:
|
||||||
@ -1662,7 +1710,7 @@ gnc_reg_set_window_name(RegWindow *regData)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
leader = regData->ledger->leader;
|
leader = xaccLedgerDisplayLeader (regData->ledger);
|
||||||
|
|
||||||
if ((leader != NULL) && single_account)
|
if ((leader != NULL) && single_account)
|
||||||
{
|
{
|
||||||
@ -1681,11 +1729,11 @@ gnc_reg_set_window_name(RegWindow *regData)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_toolbar_change_cb(void *data)
|
gnc_toolbar_change_cb (void *data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
gnc_reg_refresh_toolbar(regData);
|
gnc_reg_refresh_toolbar (regData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************\
|
/********************************************************************\
|
||||||
@ -1698,6 +1746,7 @@ gnc_toolbar_change_cb(void *data)
|
|||||||
RegWindow *
|
RegWindow *
|
||||||
regWindowLedger (xaccLedgerDisplay *ledger)
|
regWindowLedger (xaccLedgerDisplay *ledger)
|
||||||
{
|
{
|
||||||
|
SplitRegister *reg;
|
||||||
RegWindow *regData;
|
RegWindow *regData;
|
||||||
GtkWidget *vbox;
|
GtkWidget *vbox;
|
||||||
GtkWidget *register_window;
|
GtkWidget *register_window;
|
||||||
@ -1705,16 +1754,20 @@ regWindowLedger (xaccLedgerDisplay *ledger)
|
|||||||
GtkWidget *table_frame;
|
GtkWidget *table_frame;
|
||||||
GtkWidget *statusbar;
|
GtkWidget *statusbar;
|
||||||
|
|
||||||
regData = ledger->gui_hook;
|
reg = xaccLedgerDisplayGetSR (ledger);
|
||||||
|
|
||||||
|
regData = xaccLedgerDisplayGetUserData (ledger);
|
||||||
if (regData != NULL)
|
if (regData != NULL)
|
||||||
return regData;
|
return regData;
|
||||||
|
|
||||||
regData = g_new(RegWindow, 1);
|
regData = g_new (RegWindow, 1);
|
||||||
|
|
||||||
ledger->gui_hook = regData;
|
xaccLedgerDisplaySetUserData (ledger, regData);
|
||||||
ledger->destroy = regDestroy;
|
|
||||||
ledger->set_help = regSetHelp;
|
xaccLedgerDisplaySetHandlers (ledger,
|
||||||
ledger->get_parent = gnc_register_get_parent;
|
regDestroy,
|
||||||
|
gnc_register_get_parent,
|
||||||
|
regSetHelp);
|
||||||
|
|
||||||
register_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
register_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
|
|
||||||
@ -1739,12 +1792,12 @@ regWindowLedger (xaccLedgerDisplay *ledger)
|
|||||||
|
|
||||||
regData->date_window = gnc_register_date_window(regData);
|
regData->date_window = gnc_register_date_window(regData);
|
||||||
|
|
||||||
if (ledger->type != SEARCH_LEDGER)
|
if (reg->type != SEARCH_LEDGER)
|
||||||
gnc_register_set_date_range(regData);
|
gnc_register_set_date_range(regData);
|
||||||
|
|
||||||
/* Now that we have a date range, remove any existing
|
/* Now that we have a date range, remove any existing
|
||||||
* maximum on the number of splits returned. */
|
* maximum on the number of splits returned. */
|
||||||
xaccQuerySetMaxSplits(regData->ledger->query, -1);
|
xaccQuerySetMaxSplits (xaccLedgerDisplayGetQuery (regData->ledger), -1);
|
||||||
|
|
||||||
statusbar = gnc_register_create_status_bar(regData);
|
statusbar = gnc_register_create_status_bar(regData);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), statusbar, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), statusbar, FALSE, FALSE, 0);
|
||||||
@ -1797,8 +1850,8 @@ regWindowLedger (xaccLedgerDisplay *ledger)
|
|||||||
"Number of Rows", 15.0);
|
"Number of Rows", 15.0);
|
||||||
gnucash_register_set_initial_rows(num_rows);
|
gnucash_register_set_initial_rows(num_rows);
|
||||||
|
|
||||||
register_widget = gnucash_register_new(ledger->reg->table);
|
register_widget = gnucash_register_new(reg->table);
|
||||||
gnc_table_init_gui(register_widget, ledger->reg);
|
gnc_table_init_gui(register_widget, reg);
|
||||||
|
|
||||||
gtk_container_add(GTK_CONTAINER(table_frame), register_widget);
|
gtk_container_add(GTK_CONTAINER(table_frame), register_widget);
|
||||||
|
|
||||||
@ -1823,10 +1876,7 @@ regWindowLedger (xaccLedgerDisplay *ledger)
|
|||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
/* be sure to initialize the gui elements associated with the cursor */
|
/* be sure to initialize the gui elements associated with the cursor */
|
||||||
xaccConfigSplitRegister (ledger->reg,
|
xaccConfigSplitRegister (reg, reg->type, reg->style, use_double_line);
|
||||||
ledger->type,
|
|
||||||
ledger->reg->style,
|
|
||||||
use_double_line);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow grow, allow shrink, auto-shrink */
|
/* Allow grow, allow shrink, auto-shrink */
|
||||||
@ -1836,7 +1886,7 @@ regWindowLedger (xaccLedgerDisplay *ledger)
|
|||||||
int *width;
|
int *width;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
|
|
||||||
switch (ledger->type)
|
switch (reg->type)
|
||||||
{
|
{
|
||||||
case STOCK_REGISTER:
|
case STOCK_REGISTER:
|
||||||
case PORTFOLIO_LEDGER:
|
case PORTFOLIO_LEDGER:
|
||||||
@ -1851,22 +1901,21 @@ regWindowLedger (xaccLedgerDisplay *ledger)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (*width == 0)
|
if (*width == 0)
|
||||||
gnc_get_window_size(prefix, width, NULL);
|
gnc_get_window_size (prefix, width, NULL);
|
||||||
|
|
||||||
gtk_window_set_default_size(GTK_WINDOW(register_window), *width, 0);
|
gtk_window_set_default_size (GTK_WINDOW(register_window), *width, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_widget_show_all(register_window);
|
gtk_widget_show_all (register_window);
|
||||||
|
|
||||||
xaccSRShowPresentDivider (ledger->reg, TRUE);
|
xaccSRShowPresentDivider (reg, TRUE);
|
||||||
|
|
||||||
ledger->dirty = TRUE;
|
xaccLedgerDisplayRefresh (ledger);
|
||||||
xaccLedgerDisplayRefresh(ledger);
|
gnc_reg_refresh_toolbar (regData);
|
||||||
gnc_reg_refresh_toolbar(regData);
|
|
||||||
|
|
||||||
gnc_register_jump_to_blank(regData);
|
gnc_register_jump_to_blank (regData);
|
||||||
|
|
||||||
gnc_window_adjust_for_screen(GTK_WINDOW(register_window));
|
gnc_window_adjust_for_screen (GTK_WINDOW(register_window));
|
||||||
|
|
||||||
return regData;
|
return regData;
|
||||||
}
|
}
|
||||||
@ -1901,7 +1950,7 @@ gnc_register_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
|
|||||||
if (regData->window == NULL)
|
if (regData->window == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
leader = regData->ledger->leader;
|
leader = xaccLedgerDisplayLeader (regData->ledger);
|
||||||
|
|
||||||
euro = gnc_lookup_boolean_option ("International",
|
euro = gnc_lookup_boolean_option ("International",
|
||||||
"Enable EURO support",
|
"Enable EURO support",
|
||||||
@ -1962,8 +2011,11 @@ gnc_register_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
|
|||||||
{
|
{
|
||||||
gboolean expand;
|
gboolean expand;
|
||||||
gboolean sensitive;
|
gboolean sensitive;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
expand = xaccSRCurrentTransExpanded (regData->ledger->reg);
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
expand = xaccSRCurrentTransExpanded (reg);
|
||||||
|
|
||||||
gtk_signal_handler_block_by_data
|
gtk_signal_handler_block_by_data
|
||||||
(GTK_OBJECT (regData->split_button), regData);
|
(GTK_OBJECT (regData->split_button), regData);
|
||||||
@ -1982,7 +2034,7 @@ gnc_register_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
|
|||||||
gtk_check_menu_item_set_active
|
gtk_check_menu_item_set_active
|
||||||
(GTK_CHECK_MENU_ITEM (regData->split_popup_check), expand);
|
(GTK_CHECK_MENU_ITEM (regData->split_popup_check), expand);
|
||||||
|
|
||||||
sensitive = regData->ledger->reg->style == REG_STYLE_LEDGER;
|
sensitive = reg->style == REG_STYLE_LEDGER;
|
||||||
|
|
||||||
gtk_widget_set_sensitive (regData->split_button, sensitive);
|
gtk_widget_set_sensitive (regData->split_button, sensitive);
|
||||||
gtk_widget_set_sensitive (regData->split_menu_check, sensitive);
|
gtk_widget_set_sensitive (regData->split_menu_check, sensitive);
|
||||||
@ -1992,12 +2044,15 @@ gnc_register_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnc_reg_save_size(RegWindow *regData)
|
gnc_reg_save_size (RegWindow *regData)
|
||||||
{
|
{
|
||||||
|
SplitRegister *reg;
|
||||||
int *width;
|
int *width;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
|
|
||||||
switch (regData->ledger->type)
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
switch (reg->type)
|
||||||
{
|
{
|
||||||
case STOCK_REGISTER:
|
case STOCK_REGISTER:
|
||||||
case PORTFOLIO_LEDGER:
|
case PORTFOLIO_LEDGER:
|
||||||
@ -2011,10 +2066,10 @@ gnc_reg_save_size(RegWindow *regData)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gdk_window_get_geometry(regData->window->window, NULL, NULL,
|
gdk_window_get_geometry (regData->window->window, NULL, NULL,
|
||||||
width, NULL, NULL);
|
width, NULL, NULL);
|
||||||
|
|
||||||
gnc_save_window_size(prefix, *width, 0);
|
gnc_save_window_size (prefix, *width, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2025,27 +2080,35 @@ gnc_reg_save_size(RegWindow *regData)
|
|||||||
static void
|
static void
|
||||||
regDestroy (xaccLedgerDisplay *ledger)
|
regDestroy (xaccLedgerDisplay *ledger)
|
||||||
{
|
{
|
||||||
RegWindow *regData = ledger->gui_hook;
|
RegWindow *regData = xaccLedgerDisplayGetUserData (ledger);
|
||||||
|
|
||||||
if (regData)
|
if (regData)
|
||||||
{
|
{
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
gnc_reg_save_size (regData);
|
gnc_reg_save_size (regData);
|
||||||
if (ledger->reg && ledger->reg->table)
|
|
||||||
gnc_table_save_state (ledger->reg->table);
|
reg = xaccLedgerDisplayGetSR (ledger);
|
||||||
|
|
||||||
|
if (reg && reg->table)
|
||||||
|
gnc_table_save_state (reg->table);
|
||||||
|
|
||||||
gtk_widget_destroy (regData->window);
|
gtk_widget_destroy (regData->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
ledger->gui_hook = NULL;
|
xaccLedgerDisplaySetUserData (ledger, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
regSetHelp(xaccLedgerDisplay *ledger, const char *help_str)
|
regSetHelp(xaccLedgerDisplay *ledger, const char *help_str)
|
||||||
{
|
{
|
||||||
RegWindow *regData = ledger->gui_hook;
|
RegWindow *regData = xaccLedgerDisplayGetUserData (ledger);
|
||||||
const gchar *status;
|
const gchar *status;
|
||||||
|
|
||||||
|
if (!regData)
|
||||||
|
return;
|
||||||
|
|
||||||
if (help_str != NULL)
|
if (help_str != NULL)
|
||||||
status = help_str;
|
status = help_str;
|
||||||
else
|
else
|
||||||
@ -2122,7 +2185,7 @@ cutTransCB(GtkWidget *w, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
xaccSRCutCurrent(regData->ledger->reg);
|
xaccSRCutCurrent (xaccLedgerDisplayGetSR (regData->ledger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2138,7 +2201,7 @@ copyTransCB(GtkWidget *w, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
xaccSRCopyCurrent(regData->ledger->reg);
|
xaccSRCopyCurrent (xaccLedgerDisplayGetSR (regData->ledger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2154,7 +2217,7 @@ pasteTransCB(GtkWidget *w, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
xaccSRPasteCurrent(regData->ledger->reg);
|
xaccSRPasteCurrent (xaccLedgerDisplayGetSR (regData->ledger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2170,7 +2233,8 @@ xferCB(GtkWidget * w, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
gnc_xfer_dialog (regData->window, regData->ledger->leader);
|
gnc_xfer_dialog (regData->window,
|
||||||
|
xaccLedgerDisplayLeader (regData->ledger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2185,8 +2249,7 @@ static void
|
|||||||
editCB(GtkWidget * w, gpointer data)
|
editCB(GtkWidget * w, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
xaccLedgerDisplay *ledger = regData->ledger;
|
Account *account = xaccLedgerDisplayLeader (regData->ledger);
|
||||||
Account *account = ledger->leader;
|
|
||||||
|
|
||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return;
|
return;
|
||||||
@ -2207,8 +2270,7 @@ static void
|
|||||||
startRecnCB(GtkWidget * w, gpointer data)
|
startRecnCB(GtkWidget * w, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
xaccLedgerDisplay *ledger = regData->ledger;
|
Account *account = xaccLedgerDisplayLeader (regData->ledger);
|
||||||
Account *account = ledger->leader;
|
|
||||||
|
|
||||||
if (account == NULL)
|
if (account == NULL)
|
||||||
return;
|
return;
|
||||||
@ -2259,25 +2321,28 @@ static void
|
|||||||
recordCB(GtkWidget *w, gpointer data)
|
recordCB(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
SplitRegister *reg;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
|
|
||||||
trans = xaccSRGetCurrentTrans(regData->ledger->reg);
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
if (xaccSRCheckReconciled (regData->ledger->reg))
|
trans = xaccSRGetCurrentTrans (reg);
|
||||||
|
|
||||||
|
if (xaccSRCheckReconciled (reg))
|
||||||
{
|
{
|
||||||
if (!xaccSRSaveRegEntry(regData->ledger->reg, TRUE))
|
if (!xaccSRSaveRegEntry (reg, TRUE))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xaccSRCancelCursorTransChanges (regData->ledger->reg);
|
xaccSRCancelCursorTransChanges (reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trans != NULL)
|
if (trans != NULL)
|
||||||
gnc_register_include_date(regData, xaccTransGetDate(trans));
|
gnc_register_include_date(regData, xaccTransGetDate(trans));
|
||||||
|
|
||||||
xaccSRRedrawReg (regData->ledger->reg);
|
xaccSRRedrawReg (reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2414,31 +2479,33 @@ deleteCB(GtkWidget *widget, gpointer data)
|
|||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
SplitRegisterStyle style;
|
SplitRegisterStyle style;
|
||||||
CursorClass cursor_class;
|
CursorClass cursor_class;
|
||||||
|
SplitRegister *reg;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
Split *split;
|
Split *split;
|
||||||
gint result;
|
gint result;
|
||||||
|
|
||||||
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
/* get the current split based on cursor position */
|
/* get the current split based on cursor position */
|
||||||
split = xaccSRGetCurrentSplit(regData->ledger->reg);
|
split = xaccSRGetCurrentSplit(reg);
|
||||||
if (split == NULL)
|
if (split == NULL)
|
||||||
{
|
{
|
||||||
xaccSRCancelCursorSplitChanges(regData->ledger->reg);
|
xaccSRCancelCursorSplitChanges(reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
trans = xaccSplitGetParent(split);
|
trans = xaccSplitGetParent(split);
|
||||||
style = regData->ledger->reg->style;
|
style = reg->style;
|
||||||
cursor_class =
|
cursor_class = xaccSplitRegisterGetCurrentCursorClass(reg);
|
||||||
xaccSplitRegisterGetCurrentCursorClass(regData->ledger->reg);
|
|
||||||
|
|
||||||
/* Deleting the blank split just cancels */
|
/* Deleting the blank split just cancels */
|
||||||
{
|
{
|
||||||
Split *blank_split = xaccSRGetBlankSplit(regData->ledger->reg);
|
Split *blank_split = xaccSRGetBlankSplit (reg);
|
||||||
|
|
||||||
if (split == blank_split)
|
if (split == blank_split)
|
||||||
{
|
{
|
||||||
xaccSRCancelCursorTransChanges(regData->ledger->reg);
|
xaccSRCancelCursorTransChanges (reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2462,7 +2529,7 @@ deleteCB(GtkWidget *widget, gpointer data)
|
|||||||
if (!result)
|
if (!result)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xaccSRDeleteCurrentSplit(regData->ledger->reg);
|
xaccSRDeleteCurrentSplit (reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2480,7 +2547,7 @@ deleteCB(GtkWidget *widget, gpointer data)
|
|||||||
if (!result)
|
if (!result)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xaccSRDeleteCurrentTrans(regData->ledger->reg);
|
xaccSRDeleteCurrentTrans (reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2498,13 +2565,13 @@ deleteCB(GtkWidget *widget, gpointer data)
|
|||||||
|
|
||||||
if (del_type == DELETE_TRANS)
|
if (del_type == DELETE_TRANS)
|
||||||
{
|
{
|
||||||
xaccSRDeleteCurrentTrans(regData->ledger->reg);
|
xaccSRDeleteCurrentTrans (reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (del_type == DELETE_SPLITS)
|
if (del_type == DELETE_SPLITS)
|
||||||
{
|
{
|
||||||
xaccSREmptyCurrentTrans(regData->ledger->reg);
|
xaccSREmptyCurrentTrans (reg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2522,7 +2589,7 @@ static void duplicateCB(GtkWidget *w, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
xaccSRDuplicateCurrent (regData->ledger->reg);
|
xaccSRDuplicateCurrent (xaccLedgerDisplayGetSR (regData->ledger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2538,7 +2605,7 @@ cancelCB(GtkWidget *w, gpointer data)
|
|||||||
{
|
{
|
||||||
RegWindow *regData = data;
|
RegWindow *regData = data;
|
||||||
|
|
||||||
xaccSRCancelCursorTransChanges (regData->ledger->reg);
|
xaccSRCancelCursorTransChanges (xaccLedgerDisplayGetSR (regData->ledger));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2552,8 +2619,11 @@ static void
|
|||||||
gnc_register_check_close(RegWindow *regData)
|
gnc_register_check_close(RegWindow *regData)
|
||||||
{
|
{
|
||||||
gboolean pending_changes;
|
gboolean pending_changes;
|
||||||
|
SplitRegister *reg;
|
||||||
|
|
||||||
pending_changes = xaccSRHasPendingChanges(regData->ledger->reg);
|
reg = xaccLedgerDisplayGetSR (regData->ledger);
|
||||||
|
|
||||||
|
pending_changes = xaccSRHasPendingChanges (reg);
|
||||||
if (pending_changes)
|
if (pending_changes)
|
||||||
{
|
{
|
||||||
const char *message = _("The current transaction has been changed.\n"
|
const char *message = _("The current transaction has been changed.\n"
|
||||||
@ -2561,7 +2631,7 @@ gnc_register_check_close(RegWindow *regData)
|
|||||||
if (gnc_verify_dialog_parented(regData->window, message, TRUE))
|
if (gnc_verify_dialog_parented(regData->window, message, TRUE))
|
||||||
recordCB(regData->window, regData);
|
recordCB(regData->window, regData);
|
||||||
else
|
else
|
||||||
xaccSRCancelCursorTransChanges(regData->ledger->reg);
|
xaccSRCancelCursorTransChanges (reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user