mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
remove dead code
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@1021 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
a9c8ca5cdd
commit
133918f416
427
src/Ledger.c
427
src/Ledger.c
@ -1,427 +0,0 @@
|
||||
#ifdef OBSOLETE
|
||||
/*
|
||||
* FILE:
|
||||
* Ledger.c
|
||||
*
|
||||
* FUNCTION:
|
||||
* copy transaction data from engine into ledger object
|
||||
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
|
||||
HACK ALERT -- THIS CODE IS MORE OR LESS OBSOLESCENT, AND HAS BEEN
|
||||
REPLACED BY SPLITLEDGER.C IT SHOULD BE DELETED BEFORE TOO LONG.
|
||||
|
||||
*
|
||||
* HISTORY:
|
||||
* Copyright (c) 1998 Linas Vepstas
|
||||
*/
|
||||
|
||||
/********************************************************************\
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation; either version 2 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License*
|
||||
* along with this program; if not, write to the Free Software *
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
|
||||
\********************************************************************/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "Ledger.h"
|
||||
#include "messages.h"
|
||||
#include "MultiLedger.h"
|
||||
#include "register.h"
|
||||
#include "table-allgui.h"
|
||||
#include "Transaction.h"
|
||||
|
||||
#define BUFSIZE 1024
|
||||
|
||||
/* ======================================================== */
|
||||
/* this callback gets called when the user clicks on the gui
|
||||
* in such a way as to leave the current transaction, and to
|
||||
* go to a new one. So, save the current transaction.
|
||||
*/
|
||||
|
||||
static void
|
||||
LedgerMoveCursor (Table *table, void * client_data)
|
||||
{
|
||||
BasicRegister *reg = (BasicRegister *) client_data;
|
||||
xaccBRSaveRegEntry (reg);
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
|
||||
static void
|
||||
LedgerDestroy (BasicRegister *reg)
|
||||
{
|
||||
/* be sure to destroy the "blank split" */
|
||||
if (reg->user_hook) {
|
||||
Split *split;
|
||||
|
||||
split = (Split *) (reg->user_hook);
|
||||
|
||||
/* split destroy will automatically remove it
|
||||
* from its parent account */
|
||||
xaccSplitDestroy (split);
|
||||
reg->user_hook = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
|
||||
Split *
|
||||
xaccBRGetCurrentSplit (BasicRegister *reg)
|
||||
{
|
||||
CellBlock *cursor;
|
||||
Split *split;
|
||||
|
||||
/* get the handle to the current split and transaction */
|
||||
cursor = reg->table->current_cursor;
|
||||
split = (Split *) cursor->user_data;
|
||||
|
||||
return split;
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
/* a split always has a partner */
|
||||
|
||||
static char *
|
||||
GetOtherAccName (Split *split)
|
||||
{
|
||||
Account *acc = NULL;
|
||||
Transaction *trans;
|
||||
Split *s, *other_split;
|
||||
int numsplits;
|
||||
|
||||
trans = xaccSplitGetParent (split);
|
||||
|
||||
numsplits = xaccTransCountSplits (trans);
|
||||
if (2 < numsplits) return SPLIT_STR;
|
||||
|
||||
s = xaccTransGetSplit (trans, 0);
|
||||
if (s == split) {
|
||||
other_split = xaccTransGetSplit (trans, 1);
|
||||
} else {
|
||||
other_split = s;
|
||||
}
|
||||
|
||||
acc = xaccSplitGetAccount (other_split);
|
||||
if (acc) return xaccAccountGetName (acc);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
|
||||
void
|
||||
xaccBRSaveRegEntry (BasicRegister *reg)
|
||||
{
|
||||
Split *split;
|
||||
Transaction *trans;
|
||||
Account * acc;
|
||||
unsigned int changed;
|
||||
|
||||
/* use the changed flag to avoid heavy-weight updates
|
||||
* of the split & transaction fields. This will help
|
||||
* cut down on uneccessary register redraws. */
|
||||
changed = xaccBasicRegisterGetChangeFlag (reg);
|
||||
if (!changed) return;
|
||||
|
||||
/* get the handle to the current split and transaction */
|
||||
split = xaccBRGetCurrentSplit (reg);
|
||||
if (!split) return;
|
||||
trans = xaccSplitGetParent (split);
|
||||
|
||||
/* copy the contents from the cursor to the split */
|
||||
|
||||
xaccTransBeginEdit (trans);
|
||||
|
||||
if (MOD_DATE & changed)
|
||||
xaccTransSetDate (trans, reg->dateCell->date.tm_mday,
|
||||
reg->dateCell->date.tm_mon+1,
|
||||
reg->dateCell->date.tm_year+1900);
|
||||
|
||||
if (MOD_NUM & changed)
|
||||
xaccTransSetNum (trans, reg->numCell->value);
|
||||
|
||||
if (MOD_DESC & changed)
|
||||
xaccTransSetDescription (trans, reg->descCell->cell.value);
|
||||
|
||||
if (MOD_RECN & changed)
|
||||
xaccSplitSetReconcile (split, reg->recnCell->value[0]);
|
||||
|
||||
if (MOD_AMNT & changed) {
|
||||
double new_amount;
|
||||
new_amount = (reg->creditCell->amount) - (reg->debitCell->amount);
|
||||
xaccSplitSetValue (split, new_amount);
|
||||
}
|
||||
|
||||
if (MOD_SHRS & changed) {
|
||||
xaccSplitSetShareAmount (split, reg->shrsCell->amount);
|
||||
}
|
||||
|
||||
if (MOD_PRIC & changed) {
|
||||
xaccSplitSetSharePrice (split, reg->priceCell->amount);
|
||||
}
|
||||
|
||||
if (MOD_MEMO & changed)
|
||||
xaccSplitSetMemo (split, reg->memoCell->value);
|
||||
|
||||
if (MOD_ACTN & changed)
|
||||
xaccSplitSetAction (split, reg->actionCell->cell.value);
|
||||
|
||||
if (MOD_XFRM & changed) {
|
||||
xaccMoveFarEndByName (split, reg->xfrmCell->cell.value);
|
||||
}
|
||||
|
||||
if (MOD_XTO & changed) {
|
||||
/* hack alert -- implement this */
|
||||
}
|
||||
xaccTransCommitEdit (trans);
|
||||
|
||||
printf ("finished saving %s \n", xaccTransGetDescription(trans));
|
||||
|
||||
/* if the modified split is the "blank split",
|
||||
* then it is now an official part of the account.
|
||||
* Set user_hook to null, so that we can be sure of
|
||||
* getting a new split.
|
||||
*/
|
||||
if (split == ((Split *) (reg->user_hook))) {
|
||||
reg->user_hook = NULL;
|
||||
}
|
||||
|
||||
/* refresh the register windows *only* if something changed */
|
||||
acc = xaccSplitGetAccount (split);
|
||||
xaccAccountDisplayRefresh (acc);
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
|
||||
void
|
||||
xaccBRLoadRegEntry (BasicRegister *reg, Split *split)
|
||||
{
|
||||
Transaction *trans;
|
||||
char *accname;
|
||||
char buff[2];
|
||||
time_t secs;
|
||||
double baln;
|
||||
|
||||
if (!split) return;
|
||||
trans = xaccSplitGetParent (split);
|
||||
|
||||
secs = xaccTransGetDate (trans);
|
||||
xaccSetDateCellValueSecs (reg->dateCell, secs);
|
||||
|
||||
xaccSetBasicCellValue (reg->numCell, xaccTransGetNum (trans));
|
||||
xaccSetComboCellValue (reg->actionCell, xaccSplitGetAction (split));
|
||||
xaccSetQuickFillCellValue (reg->descCell, xaccTransGetDescription (trans));
|
||||
xaccSetBasicCellValue (reg->memoCell, xaccSplitGetMemo (split));
|
||||
|
||||
buff[0] = xaccSplitGetReconcile (split);
|
||||
buff[1] = 0x0;
|
||||
xaccSetBasicCellValue (reg->recnCell, buff);
|
||||
|
||||
/* the transfer account */
|
||||
accname = GetOtherAccName (split);
|
||||
xaccSetComboCellValue (reg->xfrmCell, accname);
|
||||
|
||||
xaccSetDebCredCellValue (reg->debitCell,
|
||||
reg->creditCell, xaccSplitGetValue (split));
|
||||
|
||||
/* For income and expense acounts, we have to reverse
|
||||
* the meaning of balance, since, in a dual entry
|
||||
* system, income will show up as a credit to a
|
||||
* bank account, and a debit to the income account.
|
||||
* Thus, positive and negative are interchanged */
|
||||
baln = xaccSplitGetBalance (split);
|
||||
if ((INCOME_REGISTER == reg->type) ||
|
||||
(EXPENSE_REGISTER == reg->type)) {
|
||||
baln = -baln;
|
||||
}
|
||||
xaccSetPriceCellValue (reg->balanceCell, baln);
|
||||
|
||||
xaccSetPriceCellValue (reg->priceCell, xaccSplitGetSharePrice (split));
|
||||
xaccSetPriceCellValue (reg->shrsCell, xaccSplitGetShareBalance (split));
|
||||
xaccSetPriceCellValue (reg->valueCell, xaccSplitGetValue (split));
|
||||
|
||||
reg->table->current_cursor->user_data = (void *) split;
|
||||
|
||||
/* copy cursor contents into the table */
|
||||
xaccCommitCursor (reg->table);
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
/* Some notes about the "blank split":
|
||||
* Q: What is the "blank split"?
|
||||
* A: A new, empty split appended to the bottom of the ledger
|
||||
* window. The blank split provides an area where the user
|
||||
* can type in new split/transaction info.
|
||||
* The "blank split" is treated in a special way for a number
|
||||
* of reasons:
|
||||
* (1) it must always appear as the bottom-most split
|
||||
* in the Ledger window,
|
||||
* (2) it must be committed if the user edits it, and
|
||||
* a new blank split must be created.
|
||||
* (3) it must be deleted when the ledger window is closed.
|
||||
* To implement the above, the register "user_hook" is used
|
||||
* to store the blank split with the register window structures.
|
||||
*/
|
||||
|
||||
void
|
||||
xaccBRLoadRegister (BasicRegister *reg, Split **slist,
|
||||
Account *default_source_acc)
|
||||
{
|
||||
int i;
|
||||
Split *split;
|
||||
Transaction *trans;
|
||||
Table *table;
|
||||
int save_cursor_phys_row;
|
||||
int num_phys_rows;
|
||||
int num_phys_cols;
|
||||
int num_virt_rows;
|
||||
int phys_row;
|
||||
int vrow;
|
||||
|
||||
table = reg->table;
|
||||
|
||||
/* disable move callback -- we con't want the cascade of
|
||||
* callbacks while we are fiddling with loading the register */
|
||||
table->move_cursor = NULL;
|
||||
|
||||
/* save the current cursor location; we want to restore
|
||||
* it after the reload. */
|
||||
save_cursor_phys_row = table->current_cursor_phys_row;
|
||||
xaccMoveCursorGUI (table, -1, -1);
|
||||
|
||||
/* set table size to number of items in list */
|
||||
i=0;
|
||||
while (slist[i]) i++;
|
||||
|
||||
/* compute the corresponding number of physical & virtual rows. */
|
||||
/* number of virtual rows is number of splits,
|
||||
* plus one for the header */
|
||||
num_virt_rows = i+1;
|
||||
|
||||
/* plus one for the blank new entry split. */
|
||||
if (!(reg->user_hook)) num_virt_rows ++;
|
||||
|
||||
/* num_phys_cols is easy ... just the total number os cells */
|
||||
num_phys_cols = reg->header->numCols;
|
||||
|
||||
/* num_phys_rows is the number of rows in all the cursors */
|
||||
num_phys_rows = reg->header->numRows;
|
||||
num_phys_rows += (num_virt_rows-1) * (reg->cursor->numRows);
|
||||
|
||||
/* num_virt_cols is always one. */
|
||||
xaccSetTableSize (table, num_phys_rows, num_phys_cols, num_virt_rows, 1);
|
||||
|
||||
/* make sure that the header is loaded */
|
||||
xaccSetCursor (table, reg->header, 0, 0, 0, 0);
|
||||
|
||||
printf ("load reg of %d entries --------------------------- \n",i);
|
||||
/* populate the table */
|
||||
i=0;
|
||||
vrow = 0;
|
||||
split = slist[0];
|
||||
while (split) {
|
||||
|
||||
/* don't load the "blank split" inline; instead, we put
|
||||
* it at the end. */
|
||||
if (split != ((Split *) (reg->user_hook))) {
|
||||
phys_row = reg->header->numRows;
|
||||
phys_row += vrow * (reg->cursor->numRows);
|
||||
|
||||
/* vrow+1 because header is virt row zero */
|
||||
vrow ++;
|
||||
xaccSetCursor (table, reg->cursor, phys_row, 0, vrow, 0);
|
||||
xaccMoveCursor (table, phys_row, 0);
|
||||
xaccBRLoadRegEntry (reg, split);
|
||||
}
|
||||
|
||||
i++;
|
||||
split = slist[i];
|
||||
}
|
||||
|
||||
/* add the "blank split" at the end */
|
||||
if (reg->user_hook) {
|
||||
split = (Split *) reg->user_hook;
|
||||
} else {
|
||||
trans = xaccMallocTransaction ();
|
||||
xaccTransBeginEdit (trans);
|
||||
xaccTransSetDateToday (trans);
|
||||
xaccTransCommitEdit (trans);
|
||||
split = xaccTransGetSplit (trans, 0);
|
||||
xaccAccountInsertSplit (default_source_acc, split);
|
||||
reg->user_hook = (void *) split;
|
||||
reg->destroy = LedgerDestroy;
|
||||
}
|
||||
|
||||
phys_row = reg->header->numRows;
|
||||
phys_row += vrow * (reg->cursor->numRows);
|
||||
vrow ++;
|
||||
xaccSetCursor (table, reg->cursor, phys_row, 0, vrow, 0);
|
||||
xaccMoveCursor (table, phys_row, 0);
|
||||
|
||||
xaccBRLoadRegEntry (reg, split);
|
||||
|
||||
/* restore the cursor to its original location */
|
||||
phys_row = reg->header->numRows;
|
||||
phys_row += vrow * (reg->cursor->numRows);
|
||||
|
||||
if (phys_row <= save_cursor_phys_row) {
|
||||
save_cursor_phys_row = phys_row - reg->cursor->numRows;
|
||||
}
|
||||
if (save_cursor_phys_row < (reg->header->numRows)) {
|
||||
save_cursor_phys_row = reg->header->numRows;
|
||||
}
|
||||
xaccMoveCursorGUI (table, save_cursor_phys_row, 0);
|
||||
xaccRefreshTableGUI (table);
|
||||
|
||||
/* enable callback for cursor user-driven moves */
|
||||
table->move_cursor = LedgerMoveCursor;
|
||||
table->client_data = (void *) reg;
|
||||
}
|
||||
|
||||
#ifdef THIS_HAS_BEEN_MOVED_TO_SPLITREG_C
|
||||
|
||||
/* ======================================================== */
|
||||
/* walk account tree recursively, pulling out all the names */
|
||||
|
||||
static void
|
||||
LoadXferCell (ComboCell *cell, AccountGroup *grp)
|
||||
{
|
||||
Account * acc;
|
||||
int n;
|
||||
|
||||
if (!grp) return;
|
||||
|
||||
/* build the xfer menu out of account names */
|
||||
/* traverse sub-accounts recursively */
|
||||
n = 0;
|
||||
acc = xaccGroupGetAccount (grp, n);
|
||||
while (acc) {
|
||||
xaccAddComboCellMenuItem (cell, xaccAccountGetName (acc));
|
||||
LoadXferCell (cell, xaccAccountGetChildren (acc));
|
||||
n++;
|
||||
acc = xaccGroupGetAccount (grp, n);
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
|
||||
void xaccLoadXferCell (ComboCell *cell, AccountGroup *grp)
|
||||
{
|
||||
xaccAddComboCellMenuItem (cell, "");
|
||||
xaccAddComboCellMenuItem (cell, SPLIT_STR);
|
||||
LoadXferCell (cell, grp);
|
||||
}
|
||||
|
||||
#endif /* THIS_HAS_BEEN_MOVED_TO_SPLITREG_C */
|
||||
/* ======================= end of file =================== */
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user