mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Register fixes.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2339 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
0c1164bd90
commit
50c26be1b8
14
ChangeLog
14
ChangeLog
@ -1,5 +1,19 @@
|
|||||||
|
2000-05-16 Dave Peticolas <peticola@cs.ucdavis.edu>
|
||||||
|
|
||||||
|
* src/SplitLedger.c (xaccSRCountRows): fix a bug when a two or
|
||||||
|
more splits from the same transaction are in the same account. Fix
|
||||||
|
other bugs including not accessing deleted splits/transactions.
|
||||||
|
Improve the refresh strategy. Could this code get any more
|
||||||
|
complicated? Yes...
|
||||||
|
|
||||||
2000-05-15 Dave Peticolas <peticola@cs.ucdavis.edu>
|
2000-05-15 Dave Peticolas <peticola@cs.ucdavis.edu>
|
||||||
|
|
||||||
|
* src/register/splitreg.c (xaccSplitRegisterGetCursorTypeRowCol):
|
||||||
|
new function, get cursor type by virt row/col.
|
||||||
|
|
||||||
|
* src/scm/report/transaction-report.scm: debits on left, credits
|
||||||
|
on right.
|
||||||
|
|
||||||
* src/engine/guid/md5.c (md5_process_bytes): fix 32-bit alignment
|
* src/engine/guid/md5.c (md5_process_bytes): fix 32-bit alignment
|
||||||
bug.
|
bug.
|
||||||
|
|
||||||
|
@ -132,6 +132,9 @@ struct _SRInfo
|
|||||||
/* A split used to remember where to put the cursor */
|
/* A split used to remember where to put the cursor */
|
||||||
Split *cursor_hint_split;
|
Split *cursor_hint_split;
|
||||||
|
|
||||||
|
/* A split used to remember where to put the cursor */
|
||||||
|
Split *cursor_hint_trans_split;
|
||||||
|
|
||||||
/* A column used to remember which column to put the cursor */
|
/* A column used to remember which column to put the cursor */
|
||||||
int cursor_hint_phys_col;
|
int cursor_hint_phys_col;
|
||||||
|
|
||||||
@ -189,11 +192,14 @@ static SCM copied_item = SCM_UNDEFINED;
|
|||||||
static GUID copied_leader_guid;
|
static GUID copied_leader_guid;
|
||||||
|
|
||||||
/* static prototypes */
|
/* static prototypes */
|
||||||
|
static Split * xaccSRGetTransSplit (SplitRegister *reg,
|
||||||
|
int phys_row, int phys_col);
|
||||||
static void xaccSRLoadRegEntry (SplitRegister *reg, Split *split);
|
static void xaccSRLoadRegEntry (SplitRegister *reg, Split *split);
|
||||||
static gncBoolean xaccSRSaveRegEntryToSCM (SplitRegister *reg,
|
static gncBoolean xaccSRSaveRegEntryToSCM (SplitRegister *reg,
|
||||||
SCM trans_scm, SCM split_scm);
|
SCM trans_scm, SCM split_scm);
|
||||||
static Transaction * xaccSRGetTrans (SplitRegister *reg,
|
static Transaction * xaccSRGetTrans (SplitRegister *reg,
|
||||||
int phys_row, int phys_col);
|
int phys_row, int phys_col);
|
||||||
|
static Split * xaccSRGetCurrentTransSplit (SplitRegister *reg);
|
||||||
|
|
||||||
|
|
||||||
/* The routines below create, access, and destroy the SRInfo structure
|
/* The routines below create, access, and destroy the SRInfo structure
|
||||||
@ -388,11 +394,12 @@ LedgerMoveCursor (Table *table,
|
|||||||
{
|
{
|
||||||
int new_phys_row = *p_new_phys_row;
|
int new_phys_row = *p_new_phys_row;
|
||||||
int new_phys_col = *p_new_phys_col;
|
int new_phys_col = *p_new_phys_col;
|
||||||
SplitRegister *reg = (SplitRegister *) client_data;
|
SplitRegister *reg = client_data;
|
||||||
SRInfo *info = xaccSRGetInfo(reg);
|
SRInfo *info = xaccSRGetInfo(reg);
|
||||||
Transaction *pending_trans;
|
Transaction *pending_trans;
|
||||||
Transaction *new_trans;
|
Transaction *new_trans;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
|
Split *trans_split;
|
||||||
Split *new_split;
|
Split *new_split;
|
||||||
gncBoolean saved;
|
gncBoolean saved;
|
||||||
Locator *locator;
|
Locator *locator;
|
||||||
@ -402,8 +409,7 @@ LedgerMoveCursor (Table *table,
|
|||||||
int phys_col_offset;
|
int phys_col_offset;
|
||||||
int style;
|
int style;
|
||||||
|
|
||||||
PINFO ("start callback %d %d \n",
|
PINFO ("start callback %d %d \n", new_phys_row, new_phys_col);
|
||||||
new_phys_row, new_phys_col);
|
|
||||||
|
|
||||||
/* The transaction we are coming from */
|
/* The transaction we are coming from */
|
||||||
trans = xaccSRGetCurrentTrans(reg);
|
trans = xaccSRGetCurrentTrans(reg);
|
||||||
@ -415,6 +421,9 @@ LedgerMoveCursor (Table *table,
|
|||||||
/* The transaction where we are moving to */
|
/* The transaction where we are moving to */
|
||||||
new_trans = xaccSRGetTrans(reg, new_phys_row, new_phys_col);
|
new_trans = xaccSRGetTrans(reg, new_phys_row, new_phys_col);
|
||||||
|
|
||||||
|
/* The split at the transaction line we are moving to */
|
||||||
|
trans_split = xaccSRGetTransSplit(reg, new_phys_row, new_phys_col);
|
||||||
|
|
||||||
/* The split we are moving to */
|
/* The split we are moving to */
|
||||||
new_split = xaccGetUserData(reg->table, new_phys_row, new_phys_col);
|
new_split = xaccGetUserData(reg->table, new_phys_row, new_phys_col);
|
||||||
|
|
||||||
@ -453,7 +462,7 @@ LedgerMoveCursor (Table *table,
|
|||||||
|
|
||||||
/* if the split we were going to is still in the register,
|
/* if the split we were going to is still in the register,
|
||||||
* then it may have moved. Find out where it is now. */
|
* then it may have moved. Find out where it is now. */
|
||||||
if (xaccSRGetTransSplitRowCol (reg, new_trans, new_split,
|
if (xaccSRGetTransSplitRowCol (reg, new_trans, trans_split, new_split,
|
||||||
&virt_row, &virt_col)) {
|
&virt_row, &virt_col)) {
|
||||||
RevLocator *rev_locator;
|
RevLocator *rev_locator;
|
||||||
|
|
||||||
@ -512,6 +521,9 @@ LedgerMoveCursor (Table *table,
|
|||||||
new_trans = xaccSRGetTrans(reg, new_phys_row, new_phys_col);
|
new_trans = xaccSRGetTrans(reg, new_phys_row, new_phys_col);
|
||||||
info->cursor_hint_trans = new_trans;
|
info->cursor_hint_trans = new_trans;
|
||||||
|
|
||||||
|
trans_split = xaccSRGetTransSplit(reg, new_phys_row, new_phys_col);
|
||||||
|
info->cursor_hint_trans_split = trans_split;
|
||||||
|
|
||||||
new_split = xaccGetUserData (reg->table, new_phys_row, new_phys_col);
|
new_split = xaccGetUserData (reg->table, new_phys_row, new_phys_col);
|
||||||
info->cursor_hint_split = new_split;
|
info->cursor_hint_split = new_split;
|
||||||
|
|
||||||
@ -523,9 +535,21 @@ LedgerMoveCursor (Table *table,
|
|||||||
*p_new_phys_row = table->current_cursor_phys_row;
|
*p_new_phys_row = table->current_cursor_phys_row;
|
||||||
*p_new_phys_col = table->current_cursor_phys_col;
|
*p_new_phys_col = table->current_cursor_phys_col;
|
||||||
|
|
||||||
|
info->cursor_hint_trans = xaccSRGetCurrentTrans (reg);
|
||||||
|
info->cursor_hint_split = xaccSRGetCurrentSplit (reg);
|
||||||
|
info->cursor_hint_trans_split = xaccSRGetCurrentTransSplit (reg);
|
||||||
|
info->cursor_hint_phys_col = -1;
|
||||||
|
|
||||||
PINFO ("after dynamic %d %d stored val %d\n",
|
PINFO ("after dynamic %d %d stored val %d\n",
|
||||||
*p_new_phys_row, *p_new_phys_col, reg->cursor_phys_row);
|
*p_new_phys_row, *p_new_phys_col, reg->cursor_phys_row);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
info->cursor_hint_trans = new_trans;
|
||||||
|
info->cursor_hint_split = new_split;
|
||||||
|
info->cursor_hint_trans_split = trans_split;
|
||||||
|
info->cursor_hint_phys_col = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
@ -691,6 +715,89 @@ xaccSRGetTrans (SplitRegister *reg, int phys_row, int phys_col)
|
|||||||
|
|
||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
|
|
||||||
|
static Split *
|
||||||
|
xaccSRGetTransSplit (SplitRegister *reg, int phys_row, int phys_col)
|
||||||
|
{
|
||||||
|
CursorType cursor_type;
|
||||||
|
int virt_row, virt_col;
|
||||||
|
|
||||||
|
if (reg == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if ((phys_row < 0) || (phys_col < 0) ||
|
||||||
|
(phys_row >= reg->table->num_phys_rows) ||
|
||||||
|
(phys_col >= reg->table->num_phys_cols))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
virt_row = reg->table->locators[phys_row][phys_col]->virt_row;
|
||||||
|
virt_col = reg->table->locators[phys_row][phys_col]->virt_col;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
cursor_type = xaccSplitRegisterGetCursorTypeRowCol (reg,
|
||||||
|
virt_row, virt_col);
|
||||||
|
if (cursor_type == CURSOR_TRANS)
|
||||||
|
return reg->table->user_data[virt_row][virt_col];
|
||||||
|
|
||||||
|
virt_row --;
|
||||||
|
|
||||||
|
if ((0 > virt_row) || (0 > virt_col)) {
|
||||||
|
PERR ("bad row \n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================== */
|
||||||
|
|
||||||
|
static Split *
|
||||||
|
xaccSRGetCurrentTransSplit (SplitRegister *reg)
|
||||||
|
{
|
||||||
|
Split *split;
|
||||||
|
CursorType cursor_type;
|
||||||
|
int phys_row, phys_col;
|
||||||
|
int virt_row, virt_col;
|
||||||
|
|
||||||
|
if (reg == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
split = xaccSRGetCurrentSplit (reg);
|
||||||
|
cursor_type = xaccSplitRegisterGetCursorType (reg);
|
||||||
|
if (cursor_type == CURSOR_TRANS)
|
||||||
|
return split;
|
||||||
|
|
||||||
|
/* Split is not associated with a transaction cursor. Assume it is a
|
||||||
|
* split of a multi-line transaction. Go back until we find one that
|
||||||
|
* is on a transaction cursor. */
|
||||||
|
phys_row = reg->table->current_cursor_phys_row;
|
||||||
|
phys_col = reg->table->current_cursor_phys_col;
|
||||||
|
|
||||||
|
if ((phys_row < 0) || (phys_col < 0) ||
|
||||||
|
(phys_row >= reg->table->num_phys_rows) ||
|
||||||
|
(phys_col >= reg->table->num_phys_cols))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
virt_row = reg->table->locators[phys_row][phys_col]->virt_row;
|
||||||
|
virt_col = reg->table->locators[phys_row][phys_col]->virt_col;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
virt_row --;
|
||||||
|
|
||||||
|
if ((0 > virt_row) || (0 > virt_col)) {
|
||||||
|
PERR ("bad row \n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor_type = xaccSplitRegisterGetCursorTypeRowCol (reg,
|
||||||
|
virt_row, virt_col);
|
||||||
|
if (cursor_type == CURSOR_TRANS)
|
||||||
|
return reg->table->user_data[virt_row][virt_col];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ======================================================== */
|
||||||
|
|
||||||
Transaction *
|
Transaction *
|
||||||
xaccSRGetCurrentTrans (SplitRegister *reg)
|
xaccSRGetCurrentTrans (SplitRegister *reg)
|
||||||
{
|
{
|
||||||
@ -787,24 +894,45 @@ xaccSRGetSplitRowCol (SplitRegister *reg, Split *split,
|
|||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
|
|
||||||
gncBoolean
|
gncBoolean
|
||||||
xaccSRGetTransSplitRowCol (SplitRegister *reg,
|
xaccSRGetTransSplitRowCol (SplitRegister *reg, Transaction *trans,
|
||||||
Transaction *trans, Split *split,
|
Split *trans_split, Split *split,
|
||||||
int *virt_row, int *virt_col)
|
int *virt_row, int *virt_col)
|
||||||
{
|
{
|
||||||
Table *table = reg->table;
|
Table *table = reg->table;
|
||||||
gncBoolean found = GNC_F;
|
gncBoolean found_trans = GNC_F;
|
||||||
|
gncBoolean found_trans_split = GNC_F;
|
||||||
|
gncBoolean found_something = GNC_F;
|
||||||
|
CursorType cursor_type;
|
||||||
int v_row, v_col;
|
int v_row, v_col;
|
||||||
|
Transaction *t;
|
||||||
Split *s;
|
Split *s;
|
||||||
|
|
||||||
|
|
||||||
for (v_row = 1; v_row < table->num_virt_rows; v_row++)
|
for (v_row = 1; v_row < table->num_virt_rows; v_row++)
|
||||||
for (v_col = 0; v_col < table->num_virt_cols; v_col++)
|
for (v_col = 0; v_col < table->num_virt_cols; v_col++)
|
||||||
{
|
{
|
||||||
s = (Split *) table->user_data[v_row][v_col];
|
s = table->user_data[v_row][v_col];
|
||||||
|
t = xaccSplitGetParent(s);
|
||||||
|
|
||||||
if (xaccSplitGetParent(s) == trans)
|
cursor_type = xaccSplitRegisterGetCursorTypeRowCol(reg, v_row, v_col);
|
||||||
found = GNC_T;
|
|
||||||
|
|
||||||
if (found && (s == split))
|
if (t == trans)
|
||||||
|
found_trans = GNC_T;
|
||||||
|
|
||||||
|
if ((cursor_type == CURSOR_TRANS) && (s == trans_split))
|
||||||
|
found_trans_split = GNC_T;
|
||||||
|
|
||||||
|
if (found_trans && (s == split))
|
||||||
|
{
|
||||||
|
if (virt_row != NULL)
|
||||||
|
*virt_row = v_row;
|
||||||
|
if (virt_col != NULL)
|
||||||
|
*virt_col = v_col;
|
||||||
|
|
||||||
|
found_something = GNC_T;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found_trans_split && (s == split))
|
||||||
{
|
{
|
||||||
if (virt_row != NULL)
|
if (virt_row != NULL)
|
||||||
*virt_row = v_row;
|
*virt_row = v_row;
|
||||||
@ -815,7 +943,7 @@ xaccSRGetTransSplitRowCol (SplitRegister *reg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return GNC_F;
|
return found_something;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
@ -828,10 +956,12 @@ xaccSRDuplicateCurrent (SplitRegister *reg)
|
|||||||
unsigned int changed;
|
unsigned int changed;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
Split *return_split;
|
Split *return_split;
|
||||||
|
Split *trans_split;
|
||||||
Split *split;
|
Split *split;
|
||||||
|
|
||||||
split = xaccSRGetCurrentSplit(reg);
|
split = xaccSRGetCurrentSplit(reg);
|
||||||
trans = xaccSRGetCurrentTrans(reg);
|
trans = xaccSRGetCurrentTrans(reg);
|
||||||
|
trans_split = xaccSRGetCurrentTransSplit(reg);
|
||||||
|
|
||||||
/* This shouldn't happen, but be paranoid. */
|
/* This shouldn't happen, but be paranoid. */
|
||||||
if (trans == NULL)
|
if (trans == NULL)
|
||||||
@ -895,15 +1025,19 @@ xaccSRDuplicateCurrent (SplitRegister *reg)
|
|||||||
gnc_copy_split_onto_split(split, new_split);
|
gnc_copy_split_onto_split(split, new_split);
|
||||||
|
|
||||||
return_split = new_split;
|
return_split = new_split;
|
||||||
|
|
||||||
|
info->cursor_hint_split = new_split;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Transaction *new_trans;
|
Transaction *new_trans;
|
||||||
int split_index;
|
int split_index;
|
||||||
|
int trans_split_index;
|
||||||
|
|
||||||
/* We are on a transaction row. Copy the whole transaction. */
|
/* We are on a transaction row. Copy the whole transaction. */
|
||||||
|
|
||||||
split_index = gnc_trans_split_index(trans, split);
|
split_index = gnc_trans_split_index(trans, split);
|
||||||
|
trans_split_index = gnc_trans_split_index(trans, trans_split);
|
||||||
|
|
||||||
/* we should *always* find the split, but be paranoid */
|
/* we should *always* find the split, but be paranoid */
|
||||||
if (split_index < 0)
|
if (split_index < 0)
|
||||||
@ -922,6 +1056,11 @@ xaccSRDuplicateCurrent (SplitRegister *reg)
|
|||||||
split_index = 0;
|
split_index = 0;
|
||||||
|
|
||||||
return_split = xaccTransGetSplit(new_trans, split_index);
|
return_split = xaccTransGetSplit(new_trans, split_index);
|
||||||
|
trans_split = xaccTransGetSplit(new_trans, trans_split_index);
|
||||||
|
|
||||||
|
info->cursor_hint_trans = new_trans;
|
||||||
|
info->cursor_hint_split = return_split;
|
||||||
|
info->cursor_hint_trans_split = trans_split;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Refresh the GUI. */
|
/* Refresh the GUI. */
|
||||||
@ -1070,6 +1209,7 @@ xaccSRPasteCurrent (SplitRegister *reg)
|
|||||||
GList *accounts = NULL;
|
GList *accounts = NULL;
|
||||||
CursorType cursor_type;
|
CursorType cursor_type;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
|
Split *trans_split;
|
||||||
Split *split;
|
Split *split;
|
||||||
|
|
||||||
if (copied_type == CURSOR_NONE)
|
if (copied_type == CURSOR_NONE)
|
||||||
@ -1078,6 +1218,8 @@ xaccSRPasteCurrent (SplitRegister *reg)
|
|||||||
split = xaccSRGetCurrentSplit(reg);
|
split = xaccSRGetCurrentSplit(reg);
|
||||||
trans = xaccSRGetCurrentTrans(reg);
|
trans = xaccSRGetCurrentTrans(reg);
|
||||||
|
|
||||||
|
trans_split = xaccSRGetCurrentTransSplit(reg);
|
||||||
|
|
||||||
/* This shouldn't happen, but be paranoid. */
|
/* This shouldn't happen, but be paranoid. */
|
||||||
if (trans == NULL)
|
if (trans == NULL)
|
||||||
return;
|
return;
|
||||||
@ -1111,6 +1253,7 @@ xaccSRPasteCurrent (SplitRegister *reg)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const GUID *new_guid;
|
const GUID *new_guid;
|
||||||
|
int trans_split_index;
|
||||||
int split_index;
|
int split_index;
|
||||||
int num_splits;
|
int num_splits;
|
||||||
|
|
||||||
@ -1124,6 +1267,7 @@ xaccSRPasteCurrent (SplitRegister *reg)
|
|||||||
info->blank_split = NULL;
|
info->blank_split = NULL;
|
||||||
|
|
||||||
split_index = gnc_trans_split_index(trans, split);
|
split_index = gnc_trans_split_index(trans, split);
|
||||||
|
trans_split_index = gnc_trans_split_index(trans, trans_split);
|
||||||
|
|
||||||
if ((info->default_source_account != NULL) &&
|
if ((info->default_source_account != NULL) &&
|
||||||
(xaccGUIDType(&copied_leader_guid) != GNC_ID_NULL))
|
(xaccGUIDType(&copied_leader_guid) != GNC_ID_NULL))
|
||||||
@ -1142,6 +1286,8 @@ xaccSRPasteCurrent (SplitRegister *reg)
|
|||||||
|
|
||||||
info->cursor_hint_trans = trans;
|
info->cursor_hint_trans = trans;
|
||||||
info->cursor_hint_split = xaccTransGetSplit(trans, split_index);
|
info->cursor_hint_split = xaccTransGetSplit(trans, split_index);
|
||||||
|
info->cursor_hint_trans_split = xaccTransGetSplit(trans,
|
||||||
|
trans_split_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
accounts = gnc_trans_prepend_account_list(trans, accounts);
|
accounts = gnc_trans_prepend_account_list(trans, accounts);
|
||||||
@ -2223,19 +2369,26 @@ xaccSRLoadRegEntry (SplitRegister *reg, Split *split)
|
|||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xaccSRCountRows (SplitRegister *reg, Split **slist,
|
xaccSRCountRows (SplitRegister *reg,
|
||||||
Transaction *find_trans, Split *find_split,
|
Split **slist,
|
||||||
gncBoolean *ext_found_trans,
|
Transaction *find_trans,
|
||||||
gncBoolean *ext_found_split)
|
Split *find_split,
|
||||||
|
Split *find_trans_split,
|
||||||
|
gncBoolean *ext_found_trans,
|
||||||
|
gncBoolean *ext_found_split,
|
||||||
|
gncBoolean *ext_found_trans_split)
|
||||||
{
|
{
|
||||||
SRInfo *info = xaccSRGetInfo(reg);
|
SRInfo *info = xaccSRGetInfo(reg);
|
||||||
CellBlock *lead_cursor;
|
CellBlock *lead_cursor;
|
||||||
Split *split = NULL;
|
Transaction *trans;
|
||||||
|
Split *split;
|
||||||
Locator *locator;
|
Locator *locator;
|
||||||
Table *table;
|
Table *table;
|
||||||
|
|
||||||
gncBoolean found_split = GNC_F;
|
gncBoolean found_split = GNC_F;
|
||||||
gncBoolean found_trans = GNC_F;
|
gncBoolean found_trans = GNC_F;
|
||||||
|
gncBoolean found_trans_split = GNC_F;
|
||||||
|
gncBoolean on_trans_split;
|
||||||
gncBoolean multi_line;
|
gncBoolean multi_line;
|
||||||
gncBoolean dynamic;
|
gncBoolean dynamic;
|
||||||
|
|
||||||
@ -2274,7 +2427,7 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
/* num_phys_rows is the number of rows in all the cursors.
|
/* num_phys_rows is the number of rows in all the cursors.
|
||||||
* num_virt_rows is the number of cursors (including the header).
|
* num_virt_rows is the number of cursors (including the header).
|
||||||
* Count the number of rows needed.
|
* Count the number of rows needed.
|
||||||
* the phys row count will be equal to
|
* the phys row count will be equal to: (sort of)
|
||||||
* +1 for the header
|
* +1 for the header
|
||||||
* +n that is, one (transaction) row for each split passed in,
|
* +n that is, one (transaction) row for each split passed in,
|
||||||
* +n one blank edit row for each transaction
|
* +n one blank edit row for each transaction
|
||||||
@ -2284,30 +2437,64 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
num_phys_rows = reg->header->numRows;
|
num_phys_rows = reg->header->numRows;
|
||||||
num_virt_rows = 1;
|
num_virt_rows = 1;
|
||||||
|
|
||||||
|
/* Look for the transaction split */
|
||||||
i=0;
|
i=0;
|
||||||
if (slist) {
|
if (slist)
|
||||||
split = slist[0];
|
split = slist[0];
|
||||||
} else {
|
else
|
||||||
split = NULL;
|
split = NULL;
|
||||||
}
|
|
||||||
while (split) {
|
while (split) {
|
||||||
|
if (split == find_trans_split)
|
||||||
|
{
|
||||||
|
found_trans_split = GNC_T;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
split = slist[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
split = info->blank_split;
|
||||||
|
if ((split != NULL) && (split == find_trans_split))
|
||||||
|
found_trans_split = GNC_T;
|
||||||
|
|
||||||
|
/* now count the rows */
|
||||||
|
i=0;
|
||||||
|
if (slist)
|
||||||
|
split = slist[0];
|
||||||
|
else
|
||||||
|
split = NULL;
|
||||||
|
|
||||||
|
while (split) {
|
||||||
|
gncBoolean did_expand = GNC_F;
|
||||||
|
|
||||||
/* do not count the blank split */
|
/* do not count the blank split */
|
||||||
if (split != info->blank_split) {
|
if (split != info->blank_split) {
|
||||||
Transaction *trans;
|
|
||||||
gncBoolean do_expand;
|
gncBoolean do_expand;
|
||||||
|
|
||||||
|
trans = xaccSplitGetParent(split);
|
||||||
|
|
||||||
/* lets determine where to locate the cursor ... */
|
/* lets determine where to locate the cursor ... */
|
||||||
|
on_trans_split = (find_trans_split == split);
|
||||||
|
|
||||||
if (!found_split) {
|
if (!found_split) {
|
||||||
/* Check to see if we find a perfect match */
|
/* Check to see if we find a perfect match */
|
||||||
if (split == find_split) {
|
if (split == find_split) {
|
||||||
save_cursor_phys_row = num_phys_rows;
|
save_cursor_phys_row = num_phys_rows;
|
||||||
save_cursor_virt_row = num_virt_rows;
|
save_cursor_virt_row = num_virt_rows;
|
||||||
found_split = GNC_T;
|
if (on_trans_split || !found_trans_split)
|
||||||
|
found_split = GNC_T;
|
||||||
found_trans = GNC_T;
|
found_trans = GNC_T;
|
||||||
}
|
}
|
||||||
/* Otherwise, check for a close match. This could happen
|
/* Otherwise, check for a close match. This could happen
|
||||||
* if we are collapsing from multi-line to single, e.g. */
|
* if, e.g., we are collapsing from multi-line to single. */
|
||||||
else if (xaccSplitGetParent(split) == find_trans) {
|
else if (on_trans_split) {
|
||||||
|
save_cursor_phys_row = num_phys_rows;
|
||||||
|
save_cursor_virt_row = num_virt_rows;
|
||||||
|
if (trans == find_trans)
|
||||||
|
found_trans = GNC_T;
|
||||||
|
}
|
||||||
|
else if (!found_trans && (trans == find_trans)) {
|
||||||
save_cursor_phys_row = num_phys_rows;
|
save_cursor_phys_row = num_phys_rows;
|
||||||
save_cursor_virt_row = num_virt_rows;
|
save_cursor_virt_row = num_virt_rows;
|
||||||
found_trans = GNC_T;
|
found_trans = GNC_T;
|
||||||
@ -2317,12 +2504,14 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
/* if multi-line, then show all splits. If dynamic then
|
/* if multi-line, then show all splits. If dynamic then
|
||||||
* show all splits only if this is the hot split. */
|
* show all splits only if this is the hot split. */
|
||||||
do_expand = multi_line;
|
do_expand = multi_line;
|
||||||
do_expand = do_expand ||
|
do_expand = do_expand || (dynamic && (split == find_trans_split));
|
||||||
(dynamic && xaccIsPeerSplit(split, find_split));
|
if (dynamic && !found_trans_split)
|
||||||
if (dynamic && (NULL == find_split)) {
|
|
||||||
trans = xaccSplitGetParent (split);
|
|
||||||
do_expand = do_expand || (trans == find_trans);
|
do_expand = do_expand || (trans == find_trans);
|
||||||
}
|
do_expand = do_expand && !did_expand;
|
||||||
|
|
||||||
|
/* make sure we only expand once on dynamic */
|
||||||
|
if (dynamic && do_expand)
|
||||||
|
did_expand = GNC_T;
|
||||||
|
|
||||||
if (do_expand)
|
if (do_expand)
|
||||||
{
|
{
|
||||||
@ -2338,8 +2527,8 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
* j = xaccTransCountSplits (trans);
|
* j = xaccTransCountSplits (trans);
|
||||||
* num_virt_rows += j;
|
* num_virt_rows += j;
|
||||||
* num_phys_rows += j * reg->split_cursor->numRows;
|
* num_phys_rows += j * reg->split_cursor->numRows;
|
||||||
* except that we also have to find teh saved cursor row,
|
* except that we also have to find the saved cursor row,
|
||||||
* Thus, we need a real looop over the splits.
|
* Thus, we need a real loop over the splits.
|
||||||
* The do..while will automaticaly put a blank (null)
|
* The do..while will automaticaly put a blank (null)
|
||||||
* split at the end
|
* split at the end
|
||||||
*/
|
*/
|
||||||
@ -2357,7 +2546,8 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
(trans == find_trans)) {
|
(trans == find_trans)) {
|
||||||
save_cursor_phys_row = num_phys_rows;
|
save_cursor_phys_row = num_phys_rows;
|
||||||
save_cursor_virt_row = num_virt_rows;
|
save_cursor_virt_row = num_virt_rows;
|
||||||
found_split = GNC_T;
|
if (on_trans_split || !found_trans_split)
|
||||||
|
found_split = GNC_T;
|
||||||
found_trans = GNC_T;
|
found_trans = GNC_T;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2384,16 +2574,23 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
|
|
||||||
/* ---------------------------------------------------------- */
|
/* ---------------------------------------------------------- */
|
||||||
/* the "blank split", if it exists, is at the end */
|
/* the "blank split", if it exists, is at the end */
|
||||||
if (info->blank_split != NULL) {
|
split = info->blank_split;
|
||||||
|
trans = xaccSplitGetParent(split);
|
||||||
|
|
||||||
|
on_trans_split = (find_trans_split == split);
|
||||||
|
if (on_trans_split)
|
||||||
|
found_trans_split = GNC_T;
|
||||||
|
|
||||||
|
if (split != NULL) {
|
||||||
/* lets determine where to locate the cursor ... */
|
/* lets determine where to locate the cursor ... */
|
||||||
if (!found_split && info->blank_split == find_split) {
|
if (!found_split && (split == find_split)) {
|
||||||
save_cursor_phys_row = num_phys_rows;
|
save_cursor_phys_row = num_phys_rows;
|
||||||
save_cursor_virt_row = num_virt_rows;
|
save_cursor_virt_row = num_virt_rows;
|
||||||
found_split = GNC_T;
|
if (on_trans_split || !found_trans_split)
|
||||||
|
found_split = GNC_T;
|
||||||
found_trans = GNC_T;
|
found_trans = GNC_T;
|
||||||
}
|
}
|
||||||
else if (!found_split &&
|
else if (!found_split && (trans == find_trans)) {
|
||||||
(xaccSplitGetParent(info->blank_split) == find_trans)) {
|
|
||||||
save_cursor_phys_row = num_phys_rows;
|
save_cursor_phys_row = num_phys_rows;
|
||||||
save_cursor_virt_row = num_virt_rows;
|
save_cursor_virt_row = num_virt_rows;
|
||||||
found_trans = GNC_T;
|
found_trans = GNC_T;
|
||||||
@ -2401,11 +2598,11 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (multi_line) {
|
if (multi_line) {
|
||||||
if (!found_split && (find_split == NULL) &&
|
if (!found_split && (find_split == NULL) && (trans == find_trans)) {
|
||||||
(xaccSplitGetParent(info->blank_split) == find_trans)) {
|
|
||||||
save_cursor_phys_row = num_phys_rows + 1;
|
save_cursor_phys_row = num_phys_rows + 1;
|
||||||
save_cursor_virt_row = num_virt_rows + 1;
|
save_cursor_virt_row = num_virt_rows + 1;
|
||||||
found_split = GNC_T;
|
if (on_trans_split || !found_trans_split)
|
||||||
|
found_split = GNC_T;
|
||||||
found_trans = GNC_T;
|
found_trans = GNC_T;
|
||||||
}
|
}
|
||||||
num_virt_rows += 2;
|
num_virt_rows += 2;
|
||||||
@ -2435,10 +2632,12 @@ xaccSRCountRows (SplitRegister *reg, Split **slist,
|
|||||||
reg->cursor_phys_row = save_cursor_phys_row;
|
reg->cursor_phys_row = save_cursor_phys_row;
|
||||||
reg->cursor_virt_row = save_cursor_virt_row;
|
reg->cursor_virt_row = save_cursor_virt_row;
|
||||||
|
|
||||||
if (ext_found_split != NULL)
|
|
||||||
*ext_found_split = found_split;
|
|
||||||
if (ext_found_trans != NULL)
|
if (ext_found_trans != NULL)
|
||||||
*ext_found_trans = found_trans;
|
*ext_found_trans = found_trans;
|
||||||
|
if (ext_found_split != NULL)
|
||||||
|
*ext_found_split = found_split;
|
||||||
|
if (ext_found_trans_split != NULL)
|
||||||
|
*ext_found_trans_split = found_trans_split;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
@ -2452,6 +2651,7 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
CellBlock *lead_cursor;
|
CellBlock *lead_cursor;
|
||||||
Transaction *find_trans;
|
Transaction *find_trans;
|
||||||
Split *last_split = NULL;
|
Split *last_split = NULL;
|
||||||
|
Split *find_trans_split;
|
||||||
Split *find_split;
|
Split *find_split;
|
||||||
Split *split;
|
Split *split;
|
||||||
Table *table;
|
Table *table;
|
||||||
@ -2459,6 +2659,7 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
gncBoolean found_pending = GNC_F;
|
gncBoolean found_pending = GNC_F;
|
||||||
gncBoolean found_split = GNC_F;
|
gncBoolean found_split = GNC_F;
|
||||||
gncBoolean found_trans = GNC_F;
|
gncBoolean found_trans = GNC_F;
|
||||||
|
gncBoolean found_trans_split = GNC_F;
|
||||||
gncBoolean multi_line;
|
gncBoolean multi_line;
|
||||||
gncBoolean dynamic;
|
gncBoolean dynamic;
|
||||||
|
|
||||||
@ -2486,19 +2687,14 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* figure out where we are going to. */
|
/* figure out where we are going to. */
|
||||||
if (info->cursor_hint_trans != NULL) {
|
find_trans = info->cursor_hint_trans;
|
||||||
find_trans = info->cursor_hint_trans;
|
find_split = info->cursor_hint_split;
|
||||||
find_split = info->cursor_hint_split;
|
find_trans_split = info->cursor_hint_trans_split;
|
||||||
}
|
|
||||||
else {
|
|
||||||
find_trans = xaccSRGetCurrentTrans (reg);
|
|
||||||
find_split = xaccSRGetCurrentSplit (reg);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (info->cursor_hint_phys_col >= 0)
|
if (info->cursor_hint_phys_col < 0)
|
||||||
save_phys_col = info->cursor_hint_phys_col;
|
|
||||||
else
|
|
||||||
save_phys_col = table->current_cursor_phys_col;
|
save_phys_col = table->current_cursor_phys_col;
|
||||||
|
else
|
||||||
|
save_phys_col = info->cursor_hint_phys_col;
|
||||||
|
|
||||||
/* paranoia */
|
/* paranoia */
|
||||||
if (save_phys_col < 0)
|
if (save_phys_col < 0)
|
||||||
@ -2508,8 +2704,8 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
|
|
||||||
/* count the number of rows, looking for the place we want to go. */
|
/* count the number of rows, looking for the place we want to go. */
|
||||||
xaccSRCountRows (reg, slist,
|
xaccSRCountRows (reg, slist,
|
||||||
find_trans, find_split,
|
find_trans, find_split, find_trans_split,
|
||||||
&found_trans, &found_split);
|
&found_trans, &found_split, &found_trans_split);
|
||||||
|
|
||||||
/* If the current cursor has changed, and the 'current split'
|
/* If the current cursor has changed, and the 'current split'
|
||||||
* is still among the living, we save the values for later
|
* is still among the living, we save the values for later
|
||||||
@ -2542,12 +2738,14 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
i=0;
|
i=0;
|
||||||
vrow = 1; /* header is vrow zero */
|
vrow = 1; /* header is vrow zero */
|
||||||
phys_row = reg->header->numRows;
|
phys_row = reg->header->numRows;
|
||||||
if (slist) {
|
|
||||||
split = slist[0];
|
if (slist)
|
||||||
} else {
|
split = slist[0];
|
||||||
split = NULL;
|
else
|
||||||
}
|
split = NULL;
|
||||||
|
|
||||||
while (split) {
|
while (split) {
|
||||||
|
gncBoolean did_expand = GNC_F;
|
||||||
|
|
||||||
if (info->pending_trans == xaccSplitGetParent (split))
|
if (info->pending_trans == xaccSplitGetParent (split))
|
||||||
found_pending = GNC_T;
|
found_pending = GNC_T;
|
||||||
@ -2559,20 +2757,27 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
|
|
||||||
PINFO ("load trans %d at phys row %d \n", i, phys_row);
|
PINFO ("load trans %d at phys row %d \n", i, phys_row);
|
||||||
|
|
||||||
|
trans = xaccSplitGetParent (split);
|
||||||
|
|
||||||
/* if multi-line, then show all splits. If dynamic then
|
/* if multi-line, then show all splits. If dynamic then
|
||||||
* show all splits only if this is the hot split. */
|
* show all splits only if this is the hot split. */
|
||||||
do_expand = multi_line;
|
do_expand = multi_line;
|
||||||
do_expand = do_expand ||
|
do_expand = do_expand || (dynamic && (split == find_trans_split));
|
||||||
(dynamic && xaccIsPeerSplit(split, find_split));
|
if (dynamic && !found_trans_split)
|
||||||
if (dynamic && (NULL == find_split)) {
|
|
||||||
trans = xaccSplitGetParent (split);
|
|
||||||
do_expand = do_expand || (trans == find_trans);
|
do_expand = do_expand || (trans == find_trans);
|
||||||
}
|
|
||||||
if (dynamic && !found_trans && (vrow == reg->cursor_virt_row)) {
|
if (dynamic && !found_trans && !found_trans_split &&
|
||||||
|
(vrow == reg->cursor_virt_row)) {
|
||||||
reg->cursor_phys_row = phys_row;
|
reg->cursor_phys_row = phys_row;
|
||||||
do_expand = GNC_T;
|
do_expand = GNC_T;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* make sure we only expand once on dynamic */
|
||||||
|
do_expand = do_expand && !did_expand;
|
||||||
|
|
||||||
|
if (dynamic && do_expand)
|
||||||
|
did_expand = GNC_T;
|
||||||
|
|
||||||
if (do_expand)
|
if (do_expand)
|
||||||
{
|
{
|
||||||
Split * secondary;
|
Split * secondary;
|
||||||
@ -2587,7 +2792,6 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
/* loop over all of the splits in the transaction. The
|
/* loop over all of the splits in the transaction. The
|
||||||
* do..while will automatically put a blank (null) split
|
* do..while will automatically put a blank (null) split
|
||||||
* at the end. */
|
* at the end. */
|
||||||
trans = xaccSplitGetParent (split);
|
|
||||||
j = 0;
|
j = 0;
|
||||||
do {
|
do {
|
||||||
secondary = xaccTransGetSplit (trans, j);
|
secondary = xaccTransGetSplit (trans, j);
|
||||||
@ -2701,10 +2905,10 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
if (!found_pending)
|
if (!found_pending)
|
||||||
info->pending_trans = NULL;
|
info->pending_trans = NULL;
|
||||||
|
|
||||||
/* clear out the hint transaction, split, and col. We want
|
/* Set up the hint transaction, split, transaction split, and column. */
|
||||||
* to know if it has been set from the move callback, etc. */
|
info->cursor_hint_trans = xaccSRGetCurrentTrans (reg);
|
||||||
info->cursor_hint_trans = NULL;
|
info->cursor_hint_split = xaccSRGetCurrentSplit (reg);
|
||||||
info->cursor_hint_split = NULL;
|
info->cursor_hint_trans_split = xaccSRGetCurrentTransSplit (reg);
|
||||||
info->cursor_hint_phys_col = -1;
|
info->cursor_hint_phys_col = -1;
|
||||||
|
|
||||||
xaccRefreshTableGUI (table);
|
xaccRefreshTableGUI (table);
|
||||||
@ -2717,7 +2921,7 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
|
|||||||
table->move_cursor = LedgerMoveCursor;
|
table->move_cursor = LedgerMoveCursor;
|
||||||
table->traverse = LedgerTraverse;
|
table->traverse = LedgerTraverse;
|
||||||
table->set_help = LedgerSetHelp;
|
table->set_help = LedgerSetHelp;
|
||||||
table->client_data = (void *) reg;
|
table->client_data = reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================== */
|
/* ======================================================== */
|
||||||
|
@ -141,8 +141,8 @@ Split * xaccSRGetBlankSplit (SplitRegister *reg);
|
|||||||
|
|
||||||
gncBoolean xaccSRGetSplitRowCol (SplitRegister *reg, Split *split,
|
gncBoolean xaccSRGetSplitRowCol (SplitRegister *reg, Split *split,
|
||||||
int *virt_row, int *virt_col);
|
int *virt_row, int *virt_col);
|
||||||
gncBoolean xaccSRGetTransSplitRowCol (SplitRegister *reg,
|
gncBoolean xaccSRGetTransSplitRowCol (SplitRegister *reg, Transaction *trans,
|
||||||
Transaction *trans, Split *split,
|
Split *trans_split, Split *split,
|
||||||
int *virt_row, int *virt_col);
|
int *virt_row, int *virt_col);
|
||||||
|
|
||||||
Split * xaccSRDuplicateCurrent (SplitRegister *reg);
|
Split * xaccSRDuplicateCurrent (SplitRegister *reg);
|
||||||
|
@ -2343,14 +2343,8 @@ deleteCB(GtkWidget *widget, gpointer data)
|
|||||||
static void duplicateCB(GtkWidget *w, gpointer data)
|
static void duplicateCB(GtkWidget *w, gpointer data)
|
||||||
{
|
{
|
||||||
RegWindow *regData = (RegWindow *) data;
|
RegWindow *regData = (RegWindow *) data;
|
||||||
Split *new_split;
|
|
||||||
|
|
||||||
new_split = xaccSRDuplicateCurrent(regData->ledger->ledger);
|
xaccSRDuplicateCurrent(regData->ledger->ledger);
|
||||||
|
|
||||||
if (new_split == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
gnc_register_jump_to_split(regData, new_split);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1352,19 +1352,9 @@ xaccSplitRegisterClearChangeFlag (SplitRegister *reg)
|
|||||||
|
|
||||||
/* ============================================== */
|
/* ============================================== */
|
||||||
|
|
||||||
CursorType
|
static CursorType
|
||||||
xaccSplitRegisterGetCursorType (SplitRegister *reg)
|
sr_cellblock_cursor_type(SplitRegister *reg, CellBlock *cursor)
|
||||||
{
|
{
|
||||||
Table *table;
|
|
||||||
CellBlock *cursor;
|
|
||||||
|
|
||||||
assert(reg);
|
|
||||||
|
|
||||||
table = reg->table;
|
|
||||||
if (table == NULL)
|
|
||||||
return CURSOR_NONE;
|
|
||||||
|
|
||||||
cursor = table->current_cursor;
|
|
||||||
if (cursor == NULL)
|
if (cursor == NULL)
|
||||||
return CURSOR_NONE;
|
return CURSOR_NONE;
|
||||||
|
|
||||||
@ -1381,6 +1371,45 @@ xaccSplitRegisterGetCursorType (SplitRegister *reg)
|
|||||||
|
|
||||||
/* ============================================== */
|
/* ============================================== */
|
||||||
|
|
||||||
|
CursorType
|
||||||
|
xaccSplitRegisterGetCursorType (SplitRegister *reg)
|
||||||
|
{
|
||||||
|
Table *table;
|
||||||
|
|
||||||
|
if (reg == NULL)
|
||||||
|
return CURSOR_NONE;
|
||||||
|
|
||||||
|
table = reg->table;
|
||||||
|
if (table == NULL)
|
||||||
|
return CURSOR_NONE;
|
||||||
|
|
||||||
|
return sr_cellblock_cursor_type(reg, table->current_cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================== */
|
||||||
|
|
||||||
|
CursorType
|
||||||
|
xaccSplitRegisterGetCursorTypeRowCol (SplitRegister *reg,
|
||||||
|
int virt_row, int virt_col)
|
||||||
|
{
|
||||||
|
Table *table;
|
||||||
|
|
||||||
|
if (reg == NULL)
|
||||||
|
return CURSOR_NONE;
|
||||||
|
|
||||||
|
table = reg->table;
|
||||||
|
if (table == NULL)
|
||||||
|
return CURSOR_NONE;
|
||||||
|
|
||||||
|
if ((virt_row < 0) || (virt_row >= table->num_virt_rows) ||
|
||||||
|
(virt_col < 0) || (virt_col >= table->num_virt_cols))
|
||||||
|
return CURSOR_NONE;
|
||||||
|
|
||||||
|
return sr_cellblock_cursor_type(reg, table->handlers[virt_row][virt_col]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================== */
|
||||||
|
|
||||||
SplitRegisterBuffer *
|
SplitRegisterBuffer *
|
||||||
xaccMallocSplitRegisterBuffer ()
|
xaccMallocSplitRegisterBuffer ()
|
||||||
{
|
{
|
||||||
|
@ -233,6 +233,9 @@ void xaccSplitRegisterClearChangeFlag (SplitRegister *reg);
|
|||||||
|
|
||||||
/* Returns the type of the current cursor */
|
/* Returns the type of the current cursor */
|
||||||
CursorType xaccSplitRegisterGetCursorType (SplitRegister *reg);
|
CursorType xaccSplitRegisterGetCursorType (SplitRegister *reg);
|
||||||
|
CursorType xaccSplitRegisterGetCursorTypeRowCol (SplitRegister *reg,
|
||||||
|
int virt_row,
|
||||||
|
int virt_col);
|
||||||
|
|
||||||
/* Functions for working with split register buffers */
|
/* Functions for working with split register buffers */
|
||||||
SplitRegisterBuffer * xaccMallocSplitRegisterBuffer ();
|
SplitRegisterBuffer * xaccMallocSplitRegisterBuffer ();
|
||||||
|
@ -423,7 +423,7 @@
|
|||||||
|
|
||||||
(define (gnc:titles)
|
(define (gnc:titles)
|
||||||
(map (lambda (key) (string-append "<TH>" (string-db 'lookup key) "</TH>"))
|
(map (lambda (key) (string-append "<TH>" (string-db 'lookup key) "</TH>"))
|
||||||
(list 'date 'num 'desc 'memo 'category 'credit 'debit 'balance)))
|
(list 'date 'num 'desc 'memo 'category 'debit 'credit 'balance)))
|
||||||
|
|
||||||
(define (gnc:trep-renderer options)
|
(define (gnc:trep-renderer options)
|
||||||
(gnc:tr-report-initialize-inflow-and-outflow!)
|
(gnc:tr-report-initialize-inflow-and-outflow!)
|
||||||
|
Loading…
Reference in New Issue
Block a user