Distinguish between cut & copy in register<->scheme code.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2970 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2000-09-28 00:50:35 +00:00
parent ce65933a43
commit a22908ce3a
2 changed files with 37 additions and 27 deletions

View File

@ -209,7 +209,8 @@ static Split * xaccSRGetTransSplit (SplitRegister *reg,
PhysicalLocation phys_loc); PhysicalLocation phys_loc);
static void xaccSRLoadRegEntry (SplitRegister *reg, Split *split); static void xaccSRLoadRegEntry (SplitRegister *reg, Split *split);
static gboolean xaccSRSaveRegEntryToSCM (SplitRegister *reg, static gboolean xaccSRSaveRegEntryToSCM (SplitRegister *reg,
SCM trans_scm, SCM split_scm); SCM trans_scm, SCM split_scm,
gboolean use_cut_semantics);
static Transaction * xaccSRGetTrans (SplitRegister *reg, static Transaction * xaccSRGetTrans (SplitRegister *reg,
PhysicalLocation phys_loc); PhysicalLocation phys_loc);
static Split * xaccSRGetCurrentTransSplit (SplitRegister *reg); static Split * xaccSRGetCurrentTransSplit (SplitRegister *reg);
@ -375,14 +376,14 @@ gnc_trans_split_index(Transaction *trans, Split *split)
/* Uses the scheme split copying routines */ /* Uses the scheme split copying routines */
static void static void
gnc_copy_split_onto_split(Split *from, Split *to) gnc_copy_split_onto_split(Split *from, Split *to, gboolean use_cut_semantics)
{ {
SCM split_scm; SCM split_scm;
if ((from == NULL) || (to == NULL)) if ((from == NULL) || (to == NULL))
return; return;
split_scm = gnc_copy_split(from); split_scm = gnc_copy_split(from, use_cut_semantics);
if (split_scm == SCM_UNDEFINED) if (split_scm == SCM_UNDEFINED)
return; return;
@ -392,6 +393,7 @@ gnc_copy_split_onto_split(Split *from, Split *to)
/* Uses the scheme transaction copying routines */ /* Uses the scheme transaction copying routines */
static void static void
gnc_copy_trans_onto_trans(Transaction *from, Transaction *to, gnc_copy_trans_onto_trans(Transaction *from, Transaction *to,
gboolean use_cut_semantics,
gboolean do_commit) gboolean do_commit)
{ {
SCM trans_scm; SCM trans_scm;
@ -399,7 +401,7 @@ gnc_copy_trans_onto_trans(Transaction *from, Transaction *to,
if ((from == NULL) || (to == NULL)) if ((from == NULL) || (to == NULL))
return; return;
trans_scm = gnc_copy_trans(from); trans_scm = gnc_copy_trans(from, use_cut_semantics);
if (trans_scm == SCM_UNDEFINED) if (trans_scm == SCM_UNDEFINED)
return; return;
@ -839,7 +841,6 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir,
case CURSOR_TRANS: { case CURSOR_TRANS: {
Transaction *auto_trans; Transaction *auto_trans;
GList *refresh_accounts; GList *refresh_accounts;
Timespec post_date;
char *desc; char *desc;
/* we must be on the blank split */ /* we must be on the blank split */
@ -877,12 +878,7 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir,
return; return;
xaccTransBeginEdit(trans, FALSE); xaccTransBeginEdit(trans, FALSE);
gnc_copy_trans_onto_trans(auto_trans, trans, FALSE); gnc_copy_trans_onto_trans(auto_trans, trans, FALSE, FALSE);
xaccDateCellGetDate (reg->dateCell, &post_date);
xaccTransSetDateTS (trans, &post_date);
xaccTransSetNum (trans, reg->numCell->cell.value);
if (info->default_source_account != NULL) if (info->default_source_account != NULL)
{ {
@ -1637,7 +1633,7 @@ xaccSRDuplicateCurrent (SplitRegister *reg)
xaccTransAppendSplit(trans, new_split); xaccTransAppendSplit(trans, new_split);
xaccTransCommitEdit(trans); xaccTransCommitEdit(trans);
gnc_copy_split_onto_split(split, new_split); gnc_copy_split_onto_split(split, new_split, FALSE);
return_split = new_split; return_split = new_split;
@ -1660,7 +1656,7 @@ xaccSRDuplicateCurrent (SplitRegister *reg)
new_trans = xaccMallocTransaction(); new_trans = xaccMallocTransaction();
gnc_copy_trans_onto_trans(trans, new_trans, TRUE); gnc_copy_trans_onto_trans(trans, new_trans, FALSE, TRUE);
xaccTransBeginEdit(new_trans, TRUE); xaccTransBeginEdit(new_trans, TRUE);
xaccTransSetDateSecs(new_trans, info->last_date_entered); xaccTransSetDateSecs(new_trans, info->last_date_entered);
@ -1687,8 +1683,8 @@ xaccSRDuplicateCurrent (SplitRegister *reg)
/* ======================================================== */ /* ======================================================== */
void static void
xaccSRCopyCurrent (SplitRegister *reg) xaccSRCopyCurrentInternal (SplitRegister *reg, gboolean use_cut_semantics)
{ {
SRInfo *info = xaccSRGetInfo(reg); SRInfo *info = xaccSRGetInfo(reg);
Split *blank_split = xaccSplitLookup(&info->blank_split_guid); Split *blank_split = xaccSplitLookup(&info->blank_split_guid);
@ -1726,12 +1722,13 @@ xaccSRCopyCurrent (SplitRegister *reg)
if (cursor_class == CURSOR_SPLIT) if (cursor_class == CURSOR_SPLIT)
{ {
/* We are on a split in an expanded transaction. Just copy the split. */ /* We are on a split in an expanded transaction. Just copy the split. */
new_item = gnc_copy_split(split); new_item = gnc_copy_split(split, use_cut_semantics);
if (new_item != SCM_UNDEFINED) if (new_item != SCM_UNDEFINED)
{ {
if (changed) if (changed)
xaccSRSaveRegEntryToSCM(reg, SCM_UNDEFINED, new_item); xaccSRSaveRegEntryToSCM(reg, SCM_UNDEFINED, new_item,
use_cut_semantics);
copied_leader_guid = *xaccGUIDNULL(); copied_leader_guid = *xaccGUIDNULL();
} }
@ -1739,7 +1736,7 @@ xaccSRCopyCurrent (SplitRegister *reg)
else else
{ {
/* We are on a transaction row. Copy the whole transaction. */ /* We are on a transaction row. Copy the whole transaction. */
new_item = gnc_copy_trans(trans); new_item = gnc_copy_trans(trans, use_cut_semantics);
if (new_item != SCM_UNDEFINED) if (new_item != SCM_UNDEFINED)
{ {
@ -1754,7 +1751,7 @@ xaccSRCopyCurrent (SplitRegister *reg)
else else
split_scm = SCM_UNDEFINED; split_scm = SCM_UNDEFINED;
xaccSRSaveRegEntryToSCM(reg, new_item, split_scm); xaccSRSaveRegEntryToSCM(reg, new_item, split_scm, use_cut_semantics);
} }
copied_leader_guid = *xaccAccountGetGUID(info->default_source_account); copied_leader_guid = *xaccAccountGetGUID(info->default_source_account);
@ -1776,6 +1773,14 @@ xaccSRCopyCurrent (SplitRegister *reg)
/* ======================================================== */ /* ======================================================== */
void
xaccSRCopyCurrent (SplitRegister *reg)
{
xaccSRCopyCurrentInternal (reg, FALSE);
}
/* ======================================================== */
void void
xaccSRCutCurrent (SplitRegister *reg) xaccSRCutCurrent (SplitRegister *reg)
{ {
@ -1809,7 +1814,7 @@ xaccSRCutCurrent (SplitRegister *reg)
if (!changed && ((split == NULL) || (split == blank_split))) if (!changed && ((split == NULL) || (split == blank_split)))
return; return;
xaccSRCopyCurrent(reg); xaccSRCopyCurrentInternal(reg, TRUE);
if (cursor_class == CURSOR_SPLIT) if (cursor_class == CURSOR_SPLIT)
xaccSRDeleteCurrentSplit(reg); xaccSRDeleteCurrentSplit(reg);
@ -2235,7 +2240,8 @@ xaccSRRedrawRegEntry (SplitRegister *reg)
* in sync with xaccSRSaveRegEntry and xaccSRSaveChangedCells. */ * in sync with xaccSRSaveRegEntry and xaccSRSaveChangedCells. */
static gboolean static gboolean
xaccSRSaveRegEntryToSCM (SplitRegister *reg, SCM trans_scm, SCM split_scm) xaccSRSaveRegEntryToSCM (SplitRegister *reg, SCM trans_scm, SCM split_scm,
gboolean use_cut_semantics)
{ {
Transaction *trans; Transaction *trans;
guint32 changed; guint32 changed;
@ -2304,7 +2310,7 @@ xaccSRSaveRegEntryToSCM (SplitRegister *reg, SCM trans_scm, SCM split_scm)
double amount; double amount;
temp_split = xaccMallocSplit (); temp_split = xaccMallocSplit ();
other_split_scm = gnc_copy_split(temp_split); other_split_scm = gnc_copy_split(temp_split, use_cut_semantics);
xaccSplitDestroy(temp_split); xaccSplitDestroy(temp_split);
temp_string = gnc_split_scm_get_memo(split_scm); temp_string = gnc_split_scm_get_memo(split_scm);

View File

@ -93,7 +93,7 @@
;; This function take a C split and returns a representation ;; This function take a C split and returns a representation
;; of it as a split-structure. Assumes the transaction is open ;; of it as a split-structure. Assumes the transaction is open
;; for editing. ;; for editing.
(define (gnc:split->split-scm split) (define (gnc:split->split-scm split use-cut-semantics?)
(gnc:make-split-scm (gnc:make-split-scm
(gnc:split-get-guid split) (gnc:split-get-guid split)
(gnc:account-get-guid (gnc:split-get-account split)) (gnc:account-get-guid (gnc:split-get-account split))
@ -219,18 +219,22 @@
;; This function takes a C transaction and returns ;; This function takes a C transaction and returns
;; a representation of it as a transaction-structure. ;; a representation of it as a transaction-structure.
(define (gnc:transaction->transaction-scm trans) (define (gnc:transaction->transaction-scm trans use-cut-semantics?)
(define (trans-splits i) (define (trans-splits i)
(let ((split (gnc:transaction-get-split trans i))) (let ((split (gnc:transaction-get-split trans i)))
(if (pointer-token-null? split) (if (pointer-token-null? split)
'() '()
(cons (gnc:split->split-scm split) (cons (gnc:split->split-scm split use-cut-semantics?)
(trans-splits (+ i 1)))))) (trans-splits (+ i 1))))))
(gnc:make-transaction-scm (gnc:make-transaction-scm
(gnc:transaction-get-guid trans) (gnc:transaction-get-guid trans)
(gnc:transaction-get-date-entered trans) (gnc:transaction-get-date-entered trans)
(gnc:transaction-get-date-posted trans) (if use-cut-semantics?
(gnc:transaction-get-num trans) (gnc:transaction-get-date-posted trans)
#f)
(if use-cut-semantics?
(gnc:transaction-get-num trans)
#f)
(gnc:transaction-get-description trans) (gnc:transaction-get-description trans)
(trans-splits 0))) (trans-splits 0)))