Use per-cell save handlers.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6082 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-11-28 09:10:20 +00:00
parent 53436822d2
commit 68006009cd

View File

@ -39,6 +39,9 @@ struct sr_save_data
{
Transaction *trans;
Split *split;
gboolean handled_dc; /* We have already handled the debit/credit cells. */
gboolean do_scrub; /* Scrub other split at the end. */
};
/* This static indicates the debugging module that this .o belongs to. */
@ -93,379 +96,432 @@ gnc_split_register_save_due_date_cell (BasicCell * cell,
xaccTransSetDateDueTS (sd->trans, &ts);
}
static void
gnc_split_register_save_num_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
const char *value;
g_return_if_fail (gnc_basic_cell_has_name (cell, NUM_CELL));
value = gnc_basic_cell_get_value (cell);
DEBUG ("NUM: %s\n", value ? value : "(null)");
xaccTransSetNum (sd->trans, value);
if (gnc_num_cell_set_last_num ((NumCell *) cell, value))
{
SRInfo *info = gnc_split_register_get_info (reg);
Split *blank_split = xaccSplitLookup (&info->blank_split_guid,
gnc_get_current_book ());
Transaction *blank_trans = xaccSplitGetParent (blank_split);
if (sd->trans != blank_trans)
gnc_split_register_set_last_num (reg, gnc_basic_cell_get_value (cell));
}
}
static void
gnc_split_register_save_desc_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
const char *value;
g_return_if_fail (gnc_basic_cell_has_name (cell, DESC_CELL));
value = gnc_basic_cell_get_value (cell);
DEBUG ("DESC: %s", value ? value : "(null)");
xaccTransSetDescription (sd->trans, value);
}
static void
gnc_split_register_save_notes_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
const char *value;
g_return_if_fail (gnc_basic_cell_has_name (cell, NOTES_CELL));
value = gnc_basic_cell_get_value (cell);
DEBUG ("NOTES: %s", value ? value : "(null)");
xaccTransSetNotes (sd->trans, value);
}
static void
gnc_split_register_save_recn_cell (BasicCell * bcell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
RecnCell *cell = (RecnCell *) cell;
g_return_if_fail (gnc_basic_cell_has_name (bcell, RECN_CELL));
DEBUG ("RECN: %c", gnc_recn_cell_get_flag (cell));
xaccSplitSetReconcile (sd->split, gnc_recn_cell_get_flag (cell));
}
static void
gnc_split_register_save_actn_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
const char *value;
g_return_if_fail (gnc_basic_cell_has_name (cell, ACTN_CELL));
value = gnc_basic_cell_get_value (cell);
DEBUG ("ACTN: %s", value ? value : "(null)");
xaccSplitSetAction (sd->split, value);
}
static void
gnc_split_register_save_memo_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
const char *value;
g_return_if_fail (gnc_basic_cell_has_name (cell, MEMO_CELL));
value = gnc_basic_cell_get_value (cell);
DEBUG ("MEMO: %s", value ? value : "(null)");
xaccSplitSetMemo (sd->split, value);
}
/* OK, the handling of transfers gets complicated because it depends
* on what was displayed to the user. For a multi-line display, we
* just reparent the indicated split. For a two-line display, we want
* to reparent the "other" split, but only if there is one. XFRM is
* the straight split, MXFRM is the mirrored split. */
static void
gnc_split_register_save_xfrm_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
Account *old_acc;
Account *new_acc;
g_return_if_fail (gnc_basic_cell_has_name (cell, XFRM_CELL));
old_acc = xaccSplitGetAccount (sd->split);
new_acc = gnc_split_register_get_account (reg, XFRM_CELL);
if ((new_acc != NULL) && (old_acc != new_acc))
xaccAccountInsertSplit (new_acc, sd->split);
}
static void
gnc_split_register_save_mxfrm_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
Split * other_split;
g_return_if_fail (gnc_basic_cell_has_name (cell, MXFRM_CELL));
other_split = xaccSplitGetOtherSplit (sd->split);
/* other_split may be null for two very different reasons:
* (1) the parent transaction has three or more splits in it,
* and so the "other" split is ambiguous, and thus null.
* (2) the parent transaction has only this one split as a child.
* and "other" is null because there is no other.
*
* In the case (2), we want to create the other split, so that
* the user's request to transfer actually works out. */
if (!other_split)
{
other_split = xaccTransGetSplit (sd->trans, 1);
if (!other_split)
{
other_split = xaccMallocSplit (gnc_get_current_book ());
xaccTransAppendSplit (sd->trans, other_split);
}
}
if (other_split)
{
Account *old_acc;
Account *new_acc;
/* Do some reparenting. Insertion into new account
* will automatically delete from the old account. */
old_acc = xaccSplitGetAccount (other_split);
new_acc = gnc_split_register_get_account (reg, MXFRM_CELL);
if ((new_acc != NULL) && (old_acc != new_acc))
xaccAccountInsertSplit (new_acc, other_split);
}
}
static void
gnc_split_register_save_shares_cell (BasicCell * bcell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
PriceCell *cell = (PriceCell *) cell;
gnc_numeric amount;
g_return_if_fail (gnc_basic_cell_has_name (bcell, SHRS_CELL));
amount = gnc_price_cell_get_value (cell);
DEBUG ("SHRS");
xaccSplitSetAmount (sd->split, amount);
sd->do_scrub = TRUE;
}
static void
gnc_split_register_save_price_cell (BasicCell * bcell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
PriceCell *cell = (PriceCell *) cell;
gnc_numeric price;
g_return_if_fail (gnc_basic_cell_has_name (bcell, PRIC_CELL));
price = gnc_price_cell_get_value (cell);
DEBUG ("PRIC");
xaccSplitSetSharePrice (sd->split, price);
sd->do_scrub = TRUE;
}
static void
gnc_split_register_save_debcred_cell (BasicCell * bcell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
PriceCell *cell;
gnc_numeric new_amount;
gnc_numeric credit;
gnc_numeric debit;
g_return_if_fail (gnc_basic_cell_has_name (bcell, DEBT_CELL) ||
gnc_basic_cell_has_name (bcell, CRED_CELL));
if (sd->handled_dc)
return;
cell = (PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
CRED_CELL);
credit = gnc_price_cell_get_value (cell);
cell = (PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
DEBT_CELL);
debit = gnc_price_cell_get_value (cell);
new_amount = gnc_numeric_sub_fixed (debit, credit);
xaccSplitSetValue (sd->split, new_amount);
sd->handled_dc = TRUE;
sd->do_scrub = TRUE;
}
static void
gnc_split_register_save_cells (gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
SRInfo *info = gnc_split_register_get_info (reg);
Transaction *trans;
Split *other_split = NULL;
Split *split;
Split *other_split;
g_return_if_fail (sd != NULL);
trans = sd->trans;
split = sd->split;
if (!sd->do_scrub)
return;
if (gnc_table_layout_get_cell_changed (reg->table->layout, NUM_CELL, TRUE))
other_split = xaccSplitGetOtherSplit (sd->split);
xaccSplitScrub (sd->split);
if (other_split)
{
BasicCell *cell;
const char *value;
gnc_numeric value = xaccSplitGetValue (sd->split);
value = gnc_table_layout_get_cell_value (reg->table->layout, NUM_CELL);
value = gnc_numeric_neg (value);
DEBUG ("NUM: %s\n", value ? value : "(null)");
xaccSplitSetValue (other_split, value);
xaccTransSetNum (trans, value);
cell = gnc_table_layout_get_cell (reg->table->layout, NUM_CELL);
if (gnc_num_cell_set_last_num ((NumCell *) cell, value))
{
SRInfo *info = gnc_split_register_get_info (reg);
Split *blank_split = xaccSplitLookup(&info->blank_split_guid,
gnc_get_current_book ());
Transaction *blank_trans = xaccSplitGetParent (blank_split);
if (trans != blank_trans)
gnc_split_register_set_last_num (reg, gnc_basic_cell_get_value (cell));
}
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, DESC_CELL, TRUE))
{
const char *value;
value = gnc_table_layout_get_cell_value (reg->table->layout, DESC_CELL);
DEBUG ("DESC: %s", value ? value : "(null)");
xaccTransSetDescription (trans, value);
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, NOTES_CELL, TRUE))
{
const char *value;
value = gnc_table_layout_get_cell_value (reg->table->layout, NOTES_CELL);
DEBUG ("NOTES: %s", value ? value : "(null)");
xaccTransSetNotes (trans, value);
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, RECN_CELL, TRUE))
{
RecnCell *cell;
cell = (RecnCell *) gnc_table_layout_get_cell (reg->table->layout,
RECN_CELL);
DEBUG ("RECN: %c", gnc_recn_cell_get_flag (cell));
xaccSplitSetReconcile (split, gnc_recn_cell_get_flag (cell));
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, ACTN_CELL, TRUE))
{
const char *value;
value = gnc_table_layout_get_cell_value (reg->table->layout, ACTN_CELL);
DEBUG ("ACTN: %s", value ? value : "(null)");
xaccSplitSetAction (split, value);
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, MEMO_CELL, TRUE))
{
const char *value;
value = gnc_table_layout_get_cell_value (reg->table->layout, MEMO_CELL);
DEBUG ("MEMO: %s", value ? value : "(null)");
xaccSplitSetMemo (split, value);
}
/* -------------------------------------------------------------- */
/* OK, the handling of transfers gets complicated because it depends
* on what was displayed to the user. For a multi-line display, we
* just reparent the indicated split, its it, and that's that. For
* a two-line display, we want to reparent the "other" split, but
* only if there is one. XFRM is the straight split, MXFRM is the
* mirrored split. */
if (gnc_table_layout_get_cell_changed (reg->table->layout, XFRM_CELL, TRUE))
{
Account *old_acc;
Account *new_acc;
old_acc = xaccSplitGetAccount (split);
new_acc = gnc_split_register_get_account (reg, XFRM_CELL);
if ((new_acc != NULL) && (old_acc != new_acc))
xaccAccountInsertSplit (new_acc, split);
}
if (reg->style == REG_STYLE_LEDGER && !info->trans_expanded)
other_split = xaccSplitGetOtherSplit (split);
if (gnc_table_layout_get_cell_changed (reg->table->layout, MXFRM_CELL, TRUE))
{
other_split = xaccSplitGetOtherSplit (split);
/* other_split may be null for two very different reasons:
* (1) the parent transaction has three or more splits in it,
* and so the "other" split is ambiguous, and thus null.
* (2) the parent transaction has only this one split as a child.
* and "other" is null because there is no other.
*
* In the case (2), we want to create the other split, so that
* the user's request to transfer actually works out.
*/
if (!other_split)
{
other_split = xaccTransGetSplit (trans, 1);
if (!other_split)
{
other_split = xaccMallocSplit (gnc_get_current_book ());
xaccTransAppendSplit (trans, other_split);
}
}
if (other_split)
{
Account *old_acc, *new_acc;
/* do some reparenting. Insertion into new account will automatically
* delete from the old account */
old_acc = xaccSplitGetAccount (other_split);
new_acc = gnc_split_register_get_account (reg, MXFRM_CELL);
if ((new_acc != NULL) && (old_acc != new_acc))
xaccAccountInsertSplit (new_acc, other_split);
}
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, SHRS_CELL, TRUE))
{
PriceCell *cell;
gnc_numeric amount;
cell = (PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
SHRS_CELL);
amount = gnc_price_cell_get_value (cell);
DEBUG ("SHRS");
xaccSplitSetAmount (split, amount);
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, PRIC_CELL, TRUE))
{
PriceCell *cell;
gnc_numeric price;
cell = (PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
PRIC_CELL);
price = gnc_price_cell_get_value (cell);
DEBUG ("PRIC");
xaccSplitSetSharePrice (split, price);
}
if (gnc_table_layout_get_cell_changed (reg->table->layout,
DEBT_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
CRED_CELL, TRUE))
{
PriceCell *cell;
gnc_numeric new_amount;
gnc_numeric credit;
gnc_numeric debit;
cell = (PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
CRED_CELL);
credit = gnc_price_cell_get_value (cell);
cell = (PriceCell *) gnc_table_layout_get_cell (reg->table->layout,
DEBT_CELL);
debit = gnc_price_cell_get_value (cell);
new_amount = gnc_numeric_sub_fixed (debit, credit);
xaccSplitSetValue (split, new_amount);
}
if (gnc_table_layout_get_cell_changed (reg->table->layout,
DEBT_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
CRED_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
PRIC_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
SHRS_CELL, TRUE))
{
xaccSplitScrub (split);
if (other_split)
{
gnc_numeric value = xaccSplitGetValue (split);
value = gnc_numeric_neg (value);
xaccSplitSetValue (other_split, value);
xaccSplitScrub (other_split);
}
xaccSplitScrub (other_split);
}
}
static void
gnc_split_register_save_template_cells (gpointer save_data,
gpointer user_data)
gnc_template_register_save_unexpected_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
PERR ("unexpected changed fields in a template register");
}
static void
gnc_template_register_save_xfrm_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
SRInfo *info = gnc_split_register_get_info (reg);
Transaction *trans;
Split *split;
Split *other_split = NULL;
kvp_frame *kvpf;
AccountGroup *template_ag;
Account *template_acc;
kvp_value *tag_val;
BasicCell *cell;
SRInfo *info = gnc_split_register_get_info (reg);
Account *template_acc;
const GUID *acctGUID;
kvp_frame *kvpf;
Account *acct;
DEBUG (" ");
g_return_if_fail (gnc_basic_cell_has_name (cell, XFRM_CELL));
g_return_if_fail (sd != NULL);
kvpf = xaccSplitGetSlots (sd->split);
trans = sd->trans;
split = sd->split;
/* save the account GUID into the kvp_data. */
acct = gnc_split_register_get_account (reg, XFRM_CELL);
if (!acct)
{
PERR ("unknown account");
return;
}
acctGUID = xaccAccountGetGUID (acct);
kvp_frame_set_slot_path (kvpf, kvp_value_new_guid(acctGUID),
GNC_SX_ID, GNC_SX_ACCOUNT, NULL);
kvpf = xaccSplitGetSlots (sd->split);
template_acc = xaccAccountLookup (&info->template_account,
gnc_get_current_book ());
if (gnc_table_layout_get_cell_changed (reg->table->layout,
DATE_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
DDUE_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
NUM_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
RECN_CELL, TRUE))
{
PERR( "unexpected changed fields in a template register\n" );
}
/* set the actual account to the fake account for these templates */
xaccAccountInsertSplit (template_acc, sd->split);
}
/* We'll be using the Split's KVP frame a lot */
kvpf = xaccSplitGetSlots (split);
static void
gnc_template_register_save_mxfrm_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
}
if (gnc_table_layout_get_cell_changed (reg->table->layout, XFRM_CELL, TRUE))
{
Account *acct;
const GUID *acctGUID;
static void
gnc_template_register_save_debcred_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
kvp_frame *kvpf;
const char *value;
gnc_numeric new_amount;
gnc_numeric credit;
gnc_numeric debit;
/* save the account GUID into the kvp_data. */
acct = gnc_split_register_get_account (reg, XFRM_CELL);
if (!acct)
{
PERR ("unknown account");
return;
}
g_return_if_fail (gnc_basic_cell_has_name (cell, FDEBT_CELL) ||
gnc_basic_cell_has_name (cell, FCRED_CELL));
acctGUID = xaccAccountGetGUID (acct);
if (sd->handled_dc)
return;
kvp_frame_set_slot_path (kvpf, kvp_value_new_guid(acctGUID),
GNC_SX_ID, GNC_SX_ACCOUNT, NULL);
kvpf = xaccSplitGetSlots (sd->split);
kvpf = xaccSplitGetSlots (split);
DEBUG ("kvp_frame before: %s\n", kvp_frame_to_string (kvpf));
cell = gnc_table_layout_get_cell (reg->table->layout, XFRM_CELL);
gnc_basic_cell_set_changed (cell, FALSE);
/* amountStr = gnc_numeric_to_string (new_amount); */
/* set the actual account to the fake account for these templates */
xaccAccountInsertSplit (template_acc, split);
}
value = gnc_table_layout_get_cell_value (reg->table->layout, FCRED_CELL);
kvp_frame_set_slot_path (kvpf, kvp_value_new_string (value),
GNC_SX_ID,
GNC_SX_CREDIT_FORMULA,
NULL);
if ( gnc_table_layout_get_cell_changed (reg->table->layout,
MXFRM_CELL, TRUE) )
{
DEBUG( "Template: Got MXFRM changed\n" );
value = gnc_table_layout_get_cell_value (reg->table->layout, FDEBT_CELL);
cell = gnc_table_layout_get_cell (reg->table->layout, MXFRM_CELL);
gnc_basic_cell_set_changed (cell, FALSE);
}
kvp_frame_set_slot_path (kvpf,
kvp_value_new_string (value),
GNC_SX_ID,
GNC_SX_DEBIT_FORMULA,
NULL);
if (gnc_table_layout_get_cell_changed (reg->table->layout,
FCRED_CELL, TRUE) ||
gnc_table_layout_get_cell_changed (reg->table->layout,
FDEBT_CELL, TRUE))
{
const char *value;
char *amountStr = "x + y/42";
gnc_numeric new_amount;
gnc_numeric credit;
gnc_numeric debit;
DEBUG ("kvp_frame after: %s\n", kvp_frame_to_string (kvpf));
DEBUG ("kvp_frame before: %s\n", kvp_frame_to_string (kvpf));
/* set the amount to an innocuous value */
xaccSplitSetValue (sd->split, gnc_numeric_create (0, 1));
/* amountStr = gnc_numeric_to_string( new_amount ); */
sd->handled_dc = TRUE;
}
value = gnc_table_layout_get_cell_value (reg->table->layout, FCRED_CELL);
kvp_frame_set_slot_path( kvpf,kvp_value_new_string( value ),
GNC_SX_ID,
GNC_SX_CREDIT_FORMULA,
NULL);
static void
gnc_template_register_save_shares_cell (BasicCell * cell,
gpointer save_data,
gpointer user_data)
{
SRSaveData *sd = save_data;
SplitRegister *reg = user_data;
kvp_frame *kvpf;
char *sharesStr = "(x + y)/42";
value = gnc_table_layout_get_cell_value (reg->table->layout, FDEBT_CELL);
g_return_if_fail (gnc_basic_cell_has_name (cell, SHRS_CELL));
kvp_frame_set_slot_path( kvpf,
kvp_value_new_string( value ),
GNC_SX_ID,
GNC_SX_DEBIT_FORMULA,
NULL);
kvpf = xaccSplitGetSlots (sd->split);
DEBUG( "kvp_frame after: %s\n", kvp_frame_to_string( kvpf ) );
/* FIXME: shares cells are numeric by definition. */
DEBUG ("kvp_frame before: %s\n", kvp_frame_to_string (kvpf));
/* set the amount to an innocuous value */
xaccSplitSetValue (split, gnc_numeric_create(0, 1) );
}
/* sharesStr = gnc_numeric_to_string( sharesStr ); */
kvp_frame_set_slot_path (kvpf,
kvp_value_new_string (sharesStr),
GNC_SX_ID,
GNC_SX_SHARES,
NULL);
if (gnc_table_layout_get_cell_changed (reg->table->layout,
SHRS_CELL, TRUE))
{
char *sharesStr = "(x + y)/42";
DEBUG ("kvp_frame after: %s\n", kvp_frame_to_string (kvpf));
/* FIXME: shares cells are numeric by definition. */
DEBUG ("kvp_frame before: %s\n", kvp_frame_to_string (kvpf));
/* sharesStr = gnc_numeric_to_string( sharesStr ); */
kvp_frame_set_slot_path( kvpf,
kvp_value_new_string( sharesStr ),
GNC_SX_ID,
GNC_SX_SHARES,
NULL);
DEBUG( "kvp_frame after: %s\n", kvp_frame_to_string( kvpf ) );
/* set the shares to an innocuous value */
xaccSplitSetSharePriceAndAmount (split,
gnc_numeric_create(0, 1),
gnc_numeric_create(0, 1));
cell = gnc_table_layout_get_cell (reg->table->layout, SHRS_CELL);
gnc_basic_cell_set_changed (cell, FALSE);
}
gnc_split_register_save_cells (save_data, user_data);
/* set the shares to an innocuous value */
xaccSplitSetSharePriceAndAmount (sd->split,
gnc_numeric_create (0, 1),
gnc_numeric_create (0, 1));
}
void
@ -481,6 +537,54 @@ gnc_split_register_model_add_save_handlers (TableModel *model)
gnc_split_register_save_due_date_cell,
DDUE_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_num_cell,
NUM_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_desc_cell,
DESC_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_notes_cell,
NOTES_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_recn_cell,
RECN_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_actn_cell,
ACTN_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_memo_cell,
MEMO_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_xfrm_cell,
XFRM_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_mxfrm_cell,
MXFRM_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_shares_cell,
SHRS_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_price_cell,
PRIC_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_debcred_cell,
DEBT_CELL);
gnc_table_model_set_save_handler (model,
gnc_split_register_save_debcred_cell,
CRED_CELL);
gnc_table_model_set_post_save_handler (model, gnc_split_register_save_cells);
}
@ -489,8 +593,43 @@ gnc_template_register_model_add_save_handlers (TableModel *model)
{
g_return_if_fail (model != NULL);
gnc_table_model_set_post_save_handler
(model, gnc_split_register_save_template_cells);
gnc_split_register_model_add_save_handlers (model);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_unexpected_cell,
DATE_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_unexpected_cell,
DDUE_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_unexpected_cell,
NUM_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_unexpected_cell,
DESC_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_xfrm_cell,
XFRM_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_mxfrm_cell,
MXFRM_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_debcred_cell,
FDEBT_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_debcred_cell,
FCRED_CELL);
gnc_table_model_set_save_handler (model,
gnc_template_register_save_shares_cell,
SHRS_CELL);
}
SRSaveData *
@ -505,6 +644,8 @@ gnc_split_register_save_data_new (Transaction *trans, Split *split)
sd->trans = trans;
sd->split = split;
sd->handled_dc = FALSE;
sd->do_scrub = FALSE;
return sd;
}