mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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:
parent
dc7cd06f2b
commit
2ff12ccada
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user