Blank shares & price header on non-stock split lines.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3306 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2000-12-14 01:41:38 +00:00
parent dc7cd06f2b
commit 2ff12ccada
7 changed files with 245 additions and 128 deletions

View File

@ -432,6 +432,7 @@ xaccLedgerDisplayGeneral (Account *lead_account, GList *accounts,
* but will not do the gui init */
ld->reg = xaccMallocSplitRegister (type, style, FALSE,
xaccSRGetEntryHandler,
xaccSRGetLabelHandler,
xaccSRGetIOFlagsHandler,
xaccSRGetFGColorHandler,
xaccSRGetBGColorHandler,

View File

@ -3290,7 +3290,6 @@ use_security_cells (SplitRegister *reg, VirtualLocation virt_loc)
GNCAccountType account_type;
CursorClass cursor_class;
Account *account;
guint32 changed;
Split *split;
split = sr_get_split (reg, virt_loc.vcell_loc);
@ -3302,20 +3301,23 @@ use_security_cells (SplitRegister *reg, VirtualLocation virt_loc)
if (cursor_class != CURSOR_CLASS_SPLIT)
return TRUE;
changed = xaccSplitRegisterGetChangeFlag (reg);
if (MOD_XFRM & changed)
account = NULL;
if (virt_cell_loc_equal (virt_loc.vcell_loc,
reg->table->current_cursor_loc.vcell_loc))
{
account = xaccGetAccountFromFullName (gncGetCurrentGroup (),
reg->xfrmCell->cell.value,
account_separator);
if (!account)
account = xaccSplitGetAccount (split);
guint32 changed = xaccSplitRegisterGetChangeFlag (reg);
if (MOD_XFRM & changed)
account = xaccGetAccountFromFullName (gncGetCurrentGroup (),
reg->xfrmCell->cell.value,
account_separator);
}
else
if (!account)
account = xaccSplitGetAccount (split);
if (!account)
return XACC_CELL_ALLOW_ALL;
return TRUE;
account_type = xaccAccountGetType (account);
@ -3600,6 +3602,196 @@ xaccSRGetEntryHandler (VirtualLocation virt_loc,
}
}
static GNCAccountType
sr_type_to_account_type(SplitRegisterType sr_type)
{
switch (sr_type)
{
case BANK_REGISTER:
return BANK;
case CASH_REGISTER:
return CASH;
case ASSET_REGISTER:
return ASSET;
case CREDIT_REGISTER:
return CREDIT;
case LIABILITY_REGISTER:
return LIABILITY;
case INCOME_LEDGER:
case INCOME_REGISTER:
return INCOME;
case EXPENSE_REGISTER:
return EXPENSE;
case STOCK_REGISTER:
case PORTFOLIO_LEDGER:
return STOCK;
case CURRENCY_REGISTER:
return CURRENCY;
case GENERAL_LEDGER:
return NO_TYPE;
case EQUITY_REGISTER:
return EQUITY;
case SEARCH_LEDGER:
return NO_TYPE;
default:
return NO_TYPE;
}
}
static char *
sr_get_debit_string (SplitRegister *reg)
{
return gnc_get_debit_string (sr_type_to_account_type (reg->type));
}
static char *
sr_get_credit_string (SplitRegister *reg)
{
return gnc_get_credit_string (sr_type_to_account_type (reg->type));
}
const char *
xaccSRGetLabelHandler (VirtualLocation virt_loc, gpointer user_data)
{
SplitRegister *reg = user_data;
CellType cell_type;
cell_type = xaccSplitRegisterGetCellType (reg, virt_loc);
switch (cell_type)
{
case DATE_CELL:
return _("Date");
case NUM_CELL:
return _("Num");
case DESC_CELL:
return _("Description");
case RECN_CELL:
return _("Reconciled:R"+11);
case SHRBALN_CELL:
return _("Share Balance");
case BALN_CELL:
return _("Balance");
case ACTN_CELL:
return _("Action");
case XFRM_CELL:
return _("Account");
case MEMO_CELL:
return _("Memo");
case CRED_CELL:
if (reg->credit_str)
return reg->credit_str;
reg->credit_str = sr_get_credit_string (reg);
if (reg->credit_str)
return reg->credit_str;
reg->credit_str = g_strdup (_("Credit"));
return reg->credit_str;
case DEBT_CELL:
if (reg->debit_str)
return reg->debit_str;
reg->debit_str = sr_get_debit_string (reg);
if (reg->debit_str)
return reg->debit_str;
reg->debit_str = g_strdup (_("Debit"));
return reg->debit_str;
case PRIC_CELL:
if (!use_security_cells (reg, virt_loc))
return "";
return _("Price");
case SHRS_CELL:
if (!use_security_cells (reg, virt_loc))
return "";
return _("Shares");
case MXFRM_CELL:
return _("Transfer");
case TCRED_CELL:
if (reg->tcredit_str)
return reg->tcredit_str;
{
char *string = sr_get_credit_string (reg);
if (string)
{
reg->tcredit_str = g_strdup_printf (_("Tot %s"), string);
g_free (string);
}
}
if (reg->tcredit_str)
return reg->tcredit_str;
reg->tcredit_str = g_strdup (_("Tot Credit"));
return reg->tcredit_str;
case TDEBT_CELL:
if (reg->tdebit_str)
return reg->tdebit_str;
{
char *string = sr_get_debit_string (reg);
if (string)
{
reg->tdebit_str = g_strdup_printf (_("Tot %s"), string);
g_free (string);
}
}
if (reg->tdebit_str)
return reg->tdebit_str;
reg->tdebit_str = g_strdup (_("Tot Debit"));
return reg->tdebit_str;
case TSHRS_CELL:
return _("Tot Shares");
case TSHRBALN_CELL:
return _("Share Balance");
case TBALN_CELL:
return _("Balance");
case NOTES_CELL:
return _("Notes");
case NO_CELL:
return "";
default:
break;
}
PERR ("bad cell type: %d", cell_type);
return "";
}
CellIOFlags
xaccSRGetIOFlagsHandler (VirtualLocation virt_loc, gpointer user_data)
{
@ -3630,7 +3822,7 @@ xaccSRGetIOFlagsHandler (VirtualLocation virt_loc, gpointer user_data)
if (use_security_cells (reg, virt_loc))
return XACC_CELL_ALLOW_ALL;
return XACC_CELL_ALLOW_NONE;
return XACC_CELL_ALLOW_SHADOW;
default:
return XACC_CELL_ALLOW_NONE;

View File

@ -208,6 +208,8 @@ gboolean xaccSRCurrentTransExpanded (SplitRegister *reg);
const char * xaccSRGetEntryHandler (VirtualLocation virt_loc,
gboolean *changed,
gpointer user_data);
const char * xaccSRGetLabelHandler (VirtualLocation virt_loc,
gpointer user_data);
CellIOFlags xaccSRGetIOFlagsHandler (VirtualLocation virt_loc,
gpointer user_data);
guint32 xaccSRGetFGColorHandler (VirtualLocation virt_loc,

View File

@ -54,9 +54,6 @@
/* This static indicates the debugging module that this .o belongs to. */
static short module = MOD_REGISTER;
static SRStringGetter debit_getter = NULL;
static SRStringGetter credit_getter = NULL;
typedef struct _CellBuffer CellBuffer;
struct _CellBuffer
{
@ -139,6 +136,7 @@ xaccInitSplitRegister (SplitRegister *reg,
SplitRegisterStyle style,
gboolean use_double_line,
TableGetEntryHandler entry_handler,
TableGetLabelHandler label_handler,
TableGetCellIOFlags io_flag_handler,
TableGetFGColorHandler fg_color_handler,
TableGetBGColorHandler bg_color_handler,
@ -148,92 +146,6 @@ xaccInitSplitRegister (SplitRegister *reg,
VirtCellDataCopy copy);
/* ============================================== */
#define LABEL(NAME,label) \
{ \
BasicCell *hcell; \
hcell = reg->header_cells[NAME##_CELL]; \
xaccSetBasicCellValue (hcell, label); \
}
/* ============================================== */
void
xaccSplitRegisterSetDebitStringGetter(SRStringGetter getter)
{
debit_getter = getter;
}
void
xaccSplitRegisterSetCreditStringGetter(SRStringGetter getter)
{
credit_getter = getter;
}
/* ============================================== */
/* configLabels merely puts strings into the label cells
* it does *not* copy them to the header cursor */
static void
configLabels (SplitRegister *reg)
{
LABEL (DATE, _("Date"));
LABEL (NUM, _("Num"));
LABEL (DESC, _("Description"));
LABEL (RECN, _("Reconciled:R"+11));
LABEL (SHRBALN, _("Share Balance"));
LABEL (BALN, _("Balance"));
LABEL (ACTN, _("Action"));
LABEL (XFRM, _("Account"));
LABEL (MEMO, _("Memo"));
LABEL (CRED, _("Credit"));
LABEL (DEBT, _("Debit"));
LABEL (PRIC, _("Price"));
LABEL (SHRS, _("Shares"));
LABEL (MXFRM, _("Transfer"));
LABEL (TCRED, _("Tot Debit"));
LABEL (TDEBT, _("Tot Credit"));
LABEL (TSHRS, _("Tot Shares"));
LABEL (TSHRBALN, _("Share Balance"));
LABEL (TBALN, _("Balance"));
LABEL (NOTES, _("Notes"));
if (debit_getter != NULL)
{
char *string = debit_getter (reg->type);
if (string != NULL)
{
char *tstring;
LABEL (DEBT, string);
tstring = g_strdup_printf (_("Tot %s"), string);
LABEL (TDEBT, tstring);
g_free (tstring);
free (string);
}
}
if (credit_getter != NULL)
{
char *string = credit_getter (reg->type);
if (string != NULL)
{
char *tstring;
LABEL (CRED, string);
tstring = g_strdup_printf (_("Tot %s"), string);
LABEL (TCRED, tstring);
g_free (tstring);
free (string);
}
}
}
/* ============================================== */
/* configAction strings into the action cell */
/* hack alert -- this stuff really, really should be in a config file ... */
@ -630,6 +542,7 @@ xaccMallocSplitRegister (SplitRegisterType type,
SplitRegisterStyle style,
gboolean use_double_line,
TableGetEntryHandler entry_handler,
TableGetLabelHandler label_handler,
TableGetCellIOFlags io_flag_handler,
TableGetFGColorHandler fg_color_handler,
TableGetBGColorHandler bg_color_handler,
@ -650,6 +563,7 @@ xaccMallocSplitRegister (SplitRegisterType type,
style,
use_double_line,
entry_handler,
label_handler,
io_flag_handler,
fg_color_handler,
bg_color_handler,
@ -732,6 +646,7 @@ xaccInitSplitRegister (SplitRegister *reg,
SplitRegisterStyle style,
gboolean use_double_line,
TableGetEntryHandler entry_handler,
TableGetLabelHandler label_handler,
TableGetCellIOFlags io_flag_handler,
TableGetFGColorHandler fg_color_handler,
TableGetBGColorHandler bg_color_handler,
@ -791,10 +706,6 @@ xaccInitSplitRegister (SplitRegister *reg,
/* --------------------------- */
/* configLabels merely puts strings into the label cells. It does
* *not* copy them to the header cursor */
configLabels (reg);
/* config the layout of the cells in the cursors */
configLayout (reg);
@ -888,6 +799,7 @@ xaccInitSplitRegister (SplitRegister *reg,
configAction (reg);
table = gnc_table_new (entry_handler,
label_handler,
io_flag_handler,
fg_color_handler,
bg_color_handler,
@ -1034,6 +946,16 @@ xaccDestroySplitRegister (SplitRegister *reg)
reg->header_cells[i] = NULL;
}
g_free (reg->debit_str);
g_free (reg->tdebit_str);
g_free (reg->credit_str);
g_free (reg->tcredit_str);
reg->debit_str = NULL;
reg->tdebit_str = NULL;
reg->credit_str = NULL;
reg->tcredit_str = NULL;
/* free the memory itself */
g_free (reg);
}

View File

@ -186,7 +186,7 @@ struct _SplitRegister
DateCell * dateCell;
NumCell * numCell;
QuickFillCell * descCell;
RecnCell * recnCell; /* main transaction line reconcile */
RecnCell * recnCell;
PriceCell * shrbalnCell;
PriceCell * balanceCell;
ComboCell * actionCell;
@ -215,24 +215,26 @@ struct _SplitRegister
/* user_data allows users of this object to hang
* private data onto it */
void *user_data;
gpointer user_data;
/* The destroy callback gives user's a chance
* to free up any associated user_hook data */
SplitRegisterDestroyCB destroy;
/* configured strings for debit/credit headers */
char *debit_str;
char *credit_str;
char *tdebit_str;
char *tcredit_str;
};
typedef char* (*SRStringGetter) (SplitRegisterType);
void xaccSplitRegisterSetDebitStringGetter(SRStringGetter getter);
void xaccSplitRegisterSetCreditStringGetter(SRStringGetter getter);
SplitRegister *
xaccMallocSplitRegister (SplitRegisterType type,
SplitRegisterStyle style,
gboolean use_double_line,
TableGetEntryHandler entry_handler,
TableGetLabelHandler label_handler,
TableGetCellIOFlags io_flag_handler,
TableGetFGColorHandler fg_color_handler,
TableGetBGColorHandler bg_color_handler,

View File

@ -62,6 +62,7 @@ static void gnc_table_resize (Table * table, int virt_rows, int virt_cols);
Table *
gnc_table_new (TableGetEntryHandler entry_handler,
TableGetLabelHandler label_handler,
TableGetCellIOFlags io_flag_handler,
TableGetFGColorHandler fg_color_handler,
TableGetBGColorHandler bg_color_handler,
@ -78,6 +79,7 @@ gnc_table_new (TableGetEntryHandler entry_handler,
table = g_new0(Table, 1);
table->entry_handler = entry_handler;
table->label_handler = label_handler;
table->io_flag_handler = io_flag_handler;
table->fg_color_handler = fg_color_handler;
table->bg_color_handler = bg_color_handler;
@ -238,20 +240,10 @@ gnc_table_get_io_flags (Table *table, VirtualLocation virt_loc)
const char *
gnc_table_get_label (Table *table, VirtualLocation virt_loc)
{
VirtualCell *vcell;
CellBlockCell *cb_cell;
vcell = gnc_table_get_virtual_cell (table, virt_loc.vcell_loc);
if (vcell == NULL)
if (!table->label_handler)
return "";
cb_cell = gnc_cellblock_get_cell (vcell->cellblock,
virt_loc.phys_row_offset,
virt_loc.phys_col_offset);
if (cb_cell == NULL)
return NULL;
return cb_cell->label;
return table->label_handler (virt_loc, table->handler_user_data);
}
/* ==================================================== */
@ -618,7 +610,7 @@ gnc_table_move_cursor_internal (Table *table,
/* OK, now copy the string value from the table at large
* into the cell handler. */
io_flags = gnc_table_get_io_flags (table, virt_loc);
if (io_flags & XACC_CELL_ALLOW_INPUT)
if (io_flags & XACC_CELL_ALLOW_SHADOW)
{
const char *entry;
gboolean conditionally_changed = FALSE;

View File

@ -102,8 +102,9 @@ typedef enum
{
XACC_CELL_ALLOW_NONE = 0,
XACC_CELL_ALLOW_INPUT = 1 << 0,
XACC_CELL_ALLOW_ALL = XACC_CELL_ALLOW_INPUT,
XACC_CELL_ALLOW_EXACT_ONLY = 1 << 1
XACC_CELL_ALLOW_SHADOW = 1 << 1,
XACC_CELL_ALLOW_ALL = XACC_CELL_ALLOW_INPUT | XACC_CELL_ALLOW_SHADOW,
XACC_CELL_ALLOW_EXACT_ONLY = 1 << 2
} CellIOFlags;
@ -166,6 +167,9 @@ typedef const char * (*TableGetEntryHandler) (VirtualLocation virt_loc,
gboolean *conditionally_changed,
gpointer user_data);
typedef const char * (*TableGetLabelHandler) (VirtualLocation virt_loc,
gpointer user_data);
typedef CellIOFlags (*TableGetCellIOFlags) (VirtualLocation virt_loc,
gpointer user_data);
@ -226,6 +230,7 @@ struct _Table
void * ui_data;
TableGetEntryHandler entry_handler;
TableGetLabelHandler label_handler;
TableGetCellIOFlags io_flag_handler;
TableGetFGColorHandler fg_color_handler;
TableGetBGColorHandler bg_color_handler;
@ -243,6 +248,7 @@ struct _Table
/* Functions to create and destroy Tables. */
Table * gnc_table_new (TableGetEntryHandler entry_handler,
TableGetLabelHandler label_handler,
TableGetCellIOFlags io_flag_handler,
TableGetFGColorHandler fg_color_handler,
TableGetBGColorHandler bg_color_handler,
@ -281,10 +287,10 @@ VirtualCell * gnc_table_get_virtual_cell (Table *table,
const char * gnc_table_get_entry (Table *table, VirtualLocation virt_loc);
CellIOFlags gnc_table_get_io_flags (Table *table, VirtualLocation virt_loc);
const char * gnc_table_get_label (Table *table, VirtualLocation virt_loc);
CellIOFlags gnc_table_get_io_flags (Table *table, VirtualLocation virt_loc);
guint32 gnc_table_get_fg_color (Table *table, VirtualLocation virt_loc);
guint32 gnc_table_get_bg_color (Table *table, VirtualLocation virt_loc,