mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
First pass at an Entry Ledger. It compiles. It still needs
to be tested, and then it needs to be used. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6073 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
@@ -530,10 +530,10 @@ AC_CHECK_LIB(zvt, main, true,
|
||||
[AC_MSG_ERROR([libzvt development files not found. See config.log.])],
|
||||
`$GNOME_CONFIG --libs zvt gtkhtml`)
|
||||
|
||||
AC_CHECK_LIB(bonobo, main, true,
|
||||
[AC_MSG_ERROR([libbonobo development files not found. See config.log.])
|
||||
],
|
||||
`$GNOME_CONFIG --libs bonobo`)
|
||||
#AC_CHECK_LIB(bonobo, main, true,
|
||||
# [AC_MSG_ERROR([libbonobo development files not found. See config.log.])
|
||||
#],
|
||||
# `$GNOME_CONFIG --libs bonobo`)
|
||||
|
||||
AC_CHECK_LIB(oaf, main, true,
|
||||
[AC_MSG_ERROR([liboaf development files not found. See config.log.])],
|
||||
@@ -843,6 +843,7 @@ AC_OUTPUT(
|
||||
src/business/business-core/Makefile
|
||||
src/business/business-core/test/Makefile
|
||||
src/business/business-gnome/Makefile
|
||||
src/business/business-ledger/Makefile
|
||||
|
||||
dnl # non-makefiles
|
||||
dnl # Please read doc/build-system before adding *anything* here
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
SUBDIRS = \
|
||||
business-core \
|
||||
business-gnome
|
||||
|
||||
business-gnome \
|
||||
business-ledger
|
||||
|
||||
@@ -59,6 +59,33 @@ struct _gncEntry {
|
||||
static void addObj (GncEntry *entry);
|
||||
static void remObj (GncEntry *entry);
|
||||
|
||||
static char * typeStrs[] = {
|
||||
N_("Value"),
|
||||
N_("Percent"),
|
||||
N_("Value/Pretax"),
|
||||
N_("Percent/Pretax")
|
||||
};
|
||||
|
||||
const char *gncEntryGetTaxTypeStr (gint type)
|
||||
{
|
||||
return typeStrs[type & 0x01]; /* Only 0, 1 */
|
||||
}
|
||||
|
||||
const char *gncEntryGetDiscountTypeStr (gint type)
|
||||
{
|
||||
return typeStrs[type & 0x03]; /* Only 0, 1, 2, 3 */
|
||||
}
|
||||
|
||||
gint gncEntryGetTypeFromStr (const char *type)
|
||||
{
|
||||
gint i;
|
||||
for (i = 0; i < 3; i++)
|
||||
if (!safe_strcmp (typeStrs[i], type))
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Create/Destroy Functions */
|
||||
|
||||
GncEntry *gncEntryCreate (GNCBook *book)
|
||||
@@ -193,7 +220,7 @@ void gncEntrySetInvoice (GncEntry *entry, GncInvoice *invoice)
|
||||
void gncEntrySetTaxType (GncEntry *entry, gint type)
|
||||
{
|
||||
if (!entry) return;
|
||||
if (type < 0 || type > 3) return;
|
||||
if (type < 0 || type > 1) return;
|
||||
|
||||
entry->tax_type = type;
|
||||
entry->dirty = TRUE;
|
||||
|
||||
@@ -22,7 +22,7 @@ typedef struct _gncEntry GncEntry;
|
||||
*/
|
||||
#define GNC_ENTRY_INTERP_VALUE 0x00
|
||||
#define GNC_ENTRY_INTERP_PERCENT 0x01
|
||||
#define GNC_ENTRY_INTERP_PRETAX 0x02
|
||||
#define GNC_ENTRY_PRETAX_FLAG 0x02
|
||||
|
||||
#define GNC_ENTRY_INTERP_IS_VALUE(x) (((x)&0x01) == GNC_ENTRY_INTERP_VALUE)
|
||||
#define GNC_ENTRY_INTERP_IS_PERCENT(x) (((x)&0x01) == GNC_ENTRY_INTERP_PERCENT)
|
||||
@@ -58,9 +58,12 @@ gnc_numeric gncEntryGetQuantity (GncEntry *entry);
|
||||
gnc_numeric gncEntryGetPrice (GncEntry *entry);
|
||||
gnc_numeric gncEntryGetTax (GncEntry *entry);
|
||||
gint gncEntryGetTaxType (GncEntry *entry);
|
||||
const char * gncEntryGetTaxTypeStr (gint type);
|
||||
gnc_numeric gncEntryGetDiscount (GncEntry *entry);
|
||||
gint gncEntryGetDiscountType (GncEntry *entry);
|
||||
const char * gncEntryGetDiscountTypeStr (gint type);
|
||||
|
||||
gint gncEntryGetTypeFromStr (const char *type);
|
||||
|
||||
Account * gncEntryGetAccount (GncEntry *entry);
|
||||
Account * gncEntryGetTaxAccount (GncEntry *entry);
|
||||
|
||||
@@ -434,7 +434,7 @@ Transaction * gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
|
||||
disc = gnc_numeric_mul (subtotal, disc, 100 /* XXX */, GNC_RND_ROUND);
|
||||
|
||||
value = gnc_numeric_sub_fixed (subtotal, disc);
|
||||
if (disc_type & GNC_ENTRY_INTERP_PRETAX)
|
||||
if (disc_type & GNC_ENTRY_PRETAX_FLAG)
|
||||
subtotal = value;
|
||||
|
||||
acc_val->val = gnc_numeric_add_fixed (acc_val->val, value);
|
||||
|
||||
6
src/business/business-ledger/.cvsignore
Normal file
6
src/business/business-ledger/.cvsignore
Normal file
@@ -0,0 +1,6 @@
|
||||
*.lo
|
||||
*.la
|
||||
.deps
|
||||
.libs
|
||||
Makefile
|
||||
Makefile.in
|
||||
36
src/business/business-ledger/Makefile.am
Normal file
36
src/business/business-ledger/Makefile.am
Normal file
@@ -0,0 +1,36 @@
|
||||
SUBDIRS = .
|
||||
|
||||
pkglib_LTLIBRARIES = libgnc-business-ledger.la
|
||||
|
||||
libgnc_business_ledger_la_SOURCES = \
|
||||
gncEntryLedger.c \
|
||||
gncEntryLedgerControl.c \
|
||||
gncEntryLedgerLayout.c \
|
||||
gncEntryLedgerModel.c
|
||||
|
||||
noinst_HEADERS = \
|
||||
gncEntryLedger.h \
|
||||
gncEntryLedgerP.h \
|
||||
gncEntryLedgerControl.h \
|
||||
gncEntryLedgerLayout.h \
|
||||
gncEntryLedgerModel.h
|
||||
|
||||
libgnc_business_ledger_la_LDFLAGS = -module
|
||||
libgnc_business_ledger_la_LIBADD = \
|
||||
${top_srcdir}/src/gnome-utils/libgncmod-gnome-utils.la \
|
||||
${top_srcdir}/src/app-utils/libgncmod-app-utils.la \
|
||||
${top_srcdir}/src/register/register-core/libgncmod-register-core.la \
|
||||
${top_srcdir}/src/register/register-gnome/libgncmod-register-gnome.la
|
||||
|
||||
AM_CFLAGS = \
|
||||
-I../business-core \
|
||||
-I${top_srcdir}/src \
|
||||
-I${top_srcdir}/src/engine \
|
||||
-I${top_srcdir}/src/gnc-module \
|
||||
-I${top_srcdir}/src/app-utils \
|
||||
-I${top_srcdir}/src/gnome-utils \
|
||||
-I${top_srcdir}/src/register/register-core \
|
||||
${GUILE_INCS} \
|
||||
${GLADE_CFLAGS} \
|
||||
${GNOME_INCLUDEDIR} \
|
||||
${GLIB_CFLAGS}
|
||||
123
src/business/business-ledger/gncEntryLedger.c
Normal file
123
src/business/business-ledger/gncEntryLedger.c
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* gncEntryLedger.c -- a Ledger widget for entering GncEntry objects
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include "Account.h"
|
||||
#include "gnc-ui-util.h"
|
||||
|
||||
#include "gncEntry.h"
|
||||
#include "gncEntryLedger.h"
|
||||
#include "gncEntryLedgerP.h"
|
||||
#include "gncEntryLedgerLayout.h"
|
||||
#include "gncEntryLedgerModel.h"
|
||||
#include "gncEntryLedgerControl.h"
|
||||
|
||||
/** Static Functions ***************************************************/
|
||||
|
||||
|
||||
/** Exported Functions ***************************************************/
|
||||
|
||||
Account * gnc_entry_ledger_get_account (GncEntryLedger *ledger,
|
||||
const char * cell_name)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
if (!gnc_table_layout_get_cell_changed (ledger->table->layout, cell_name,
|
||||
TRUE))
|
||||
return NULL;
|
||||
|
||||
name = gnc_table_layout_get_cell_value (ledger->table->layout, cell_name);
|
||||
|
||||
return xaccGetAccountFromFullName (gnc_book_get_group (ledger->book),
|
||||
name,
|
||||
gnc_get_account_separator ());
|
||||
}
|
||||
|
||||
gint gnc_entry_ledger_get_type (GncEntryLedger *ledger, const char * cell_name)
|
||||
{
|
||||
const char *typeval;
|
||||
|
||||
if (!gnc_table_layout_get_cell_changed (ledger->table->layout, cell_name,
|
||||
TRUE))
|
||||
return -1;
|
||||
|
||||
typeval = gnc_table_layout_get_cell_value (ledger->table->layout, cell_name);
|
||||
|
||||
return gncEntryGetTypeFromStr (typeval);
|
||||
}
|
||||
|
||||
GncEntry * gnc_entry_ledger_get_entry (GncEntryLedger *ledger,
|
||||
VirtualCellLocation vcell_loc)
|
||||
{
|
||||
GUID *guid;
|
||||
|
||||
if (!ledger) return NULL;
|
||||
|
||||
guid = gnc_table_get_vcell_data (ledger->table, vcell_loc);
|
||||
if (!guid) return NULL;
|
||||
|
||||
return gncEntryLookup (ledger->book, guid);
|
||||
}
|
||||
|
||||
/* Returns the Entry where the cursor is currently located. */
|
||||
GncEntry * gnc_entry_ledger_get_current_entry (GncEntryLedger *ledger)
|
||||
{
|
||||
GUID *guid;
|
||||
|
||||
if (!ledger) return NULL;
|
||||
|
||||
return
|
||||
gnc_entry_ledger_get_entry (ledger,
|
||||
ledger->table->current_cursor_loc.vcell_loc);
|
||||
}
|
||||
|
||||
/* Copy GncEntry information from the list to the rows of the Ledger. */
|
||||
void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list);
|
||||
|
||||
|
||||
/* Create and return a new GncEntry Ledger */
|
||||
GncEntryLedger * gnc_entry_ledger_new (GNCBook *book, GncEntryLedgerType type)
|
||||
{
|
||||
GncEntryLedger *ledger;
|
||||
|
||||
if (!book) return NULL;
|
||||
if (type < 0 || type >= GNCENTRY_NUM_REGISTER_TYPES) return NULL;
|
||||
|
||||
ledger = g_new0 (GncEntryLedger, 1);
|
||||
ledger->type = type;
|
||||
ledger->book = book;
|
||||
|
||||
{
|
||||
TableLayout *layout = gnc_entry_ledger_layout_new (ledger);
|
||||
TableModel *model = gnc_entry_ledger_model_new ();
|
||||
TableControl *control = gnc_entry_ledger_control_new ();
|
||||
control->user_data = ledger;
|
||||
|
||||
ledger->table = gnc_table_new (layout, model, control);
|
||||
}
|
||||
|
||||
/* config_cells? */
|
||||
|
||||
/* set up header */
|
||||
|
||||
/* set up first initial row */
|
||||
|
||||
return ledger;
|
||||
}
|
||||
|
||||
/* Destroy the GncEntry Ledger */
|
||||
void gnc_entry_ledger_destroy (GncEntryLedger *ledger)
|
||||
{
|
||||
if (!ledger) return;
|
||||
|
||||
gnc_table_destroy (ledger->table);
|
||||
g_free (ledger);
|
||||
}
|
||||
48
src/business/business-ledger/gncEntryLedger.h
Normal file
48
src/business/business-ledger/gncEntryLedger.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* gncEntryLedger.h -- a ledger widget for manipulating GncEntry's
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#ifndef GNC_ENTRY_LEDGER_H
|
||||
#define GNC_ENTRY_LEDGER_H
|
||||
|
||||
#include "gncEntry.h"
|
||||
#include "gnc-book.h"
|
||||
#include "table-allgui.h"
|
||||
|
||||
typedef enum {
|
||||
GNCENTRY_LEDGER,
|
||||
GNCENTRY_CHOOSER,
|
||||
GNCENTRY_NUM_REGISTER_TYPES
|
||||
} GncEntryLedgerType;
|
||||
|
||||
#define ENTRY_ACCT_CELL "account"
|
||||
#define ENTRY_ACTN_CELL "action"
|
||||
#define ENTRY_DATE_CELL "date"
|
||||
#define ENTRY_DESC_CELL "description"
|
||||
#define ENTRY_DISC_CELL "discount"
|
||||
#define ENTRY_DISTYPE_CELL "discount-type"
|
||||
#define ENTRY_PRIC_CELL "price"
|
||||
#define ENTRY_QTY_CELL "quantity"
|
||||
#define ENTRY_TAXACC_CELL "tax-account"
|
||||
#define ENTRY_TAXTYPE_CELL "tax-type"
|
||||
#define ENTRY_TAX_CELL "tax"
|
||||
|
||||
typedef struct GncEntryLedger_s GncEntryLedger;
|
||||
|
||||
/** Prototypes ***************************************************/
|
||||
|
||||
/* Create and return a new GncEntry Ledger */
|
||||
GncEntryLedger * gnc_entry_ledger_new (GNCBook *book, GncEntryLedgerType type);
|
||||
|
||||
/* Destroy the GncEntry Ledger */
|
||||
void gnc_entry_ledger_destroy (GncEntryLedger *ledger);
|
||||
|
||||
/* Returns the Entry where the cursor is currently located. */
|
||||
GncEntry * gnc_entry_ledger_get_current_entry (GncEntryLedger *ledger);
|
||||
|
||||
/* Copy GncEntry information from the list to the rows of the Ledger. */
|
||||
void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list);
|
||||
|
||||
#endif /* GNC_ENTRY_LEDGER_H */
|
||||
46
src/business/business-ledger/gncEntryLedgerControl.c
Normal file
46
src/business/business-ledger/gncEntryLedgerControl.c
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* gncEntryLedgerControl.c -- Control for GncEntry ledger
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include "gncEntryLedgerP.h"
|
||||
#include "gncEntryLedgerControl.h"
|
||||
|
||||
static void gnc_entry_ledger_move_cursor (VirtualLocation *p_new_virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
if (!ledger) return;
|
||||
|
||||
}
|
||||
|
||||
static gboolean gnc_entry_ledger_traverse (VirtualLocation *p_new_virt_loc,
|
||||
gncTableTraversalDir dir,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
|
||||
if (!ledger) return FALSE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
TableControl * gnc_entry_ledger_control_new (void)
|
||||
{
|
||||
TableControl * control;
|
||||
|
||||
control = gnc_table_control_new ();
|
||||
control->move_cursor = gnc_entry_ledger_move_cursor;
|
||||
control->traverse = gnc_entry_ledger_traverse;
|
||||
|
||||
return control;
|
||||
}
|
||||
14
src/business/business-ledger/gncEntryLedgerControl.h
Normal file
14
src/business/business-ledger/gncEntryLedgerControl.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* gncEntryLedgerControl.h -- Control of GncEntry Manipulation Widget
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#ifndef GNC_ENTRY_LEDGER_CONTROL_H
|
||||
#define GNC_ENTRY_LEDGER_CONTROL_H
|
||||
|
||||
#include "gncEntryLedger.h"
|
||||
|
||||
TableControl * gnc_entry_ledger_control_new (void);
|
||||
|
||||
#endif /* GNC_ENTRY_LEDGER_CONTROL_H */
|
||||
154
src/business/business-ledger/gncEntryLedgerLayout.c
Normal file
154
src/business/business-ledger/gncEntryLedgerLayout.c
Normal file
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
* gncEntryLedgerLayout.c -- Layout for GncEntry ledger
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include "messages.h"
|
||||
|
||||
#include "gncEntryLedgerP.h"
|
||||
#include "gncEntryLedgerLayout.h"
|
||||
|
||||
static void
|
||||
gnc_register_add_cell (TableLayout *layout,
|
||||
const char *cell_name,
|
||||
const char *cell_type_name,
|
||||
const char *sample_text,
|
||||
CellAlignment alignment,
|
||||
gboolean expandable,
|
||||
gboolean span)
|
||||
{
|
||||
BasicCell *cell;
|
||||
|
||||
g_return_if_fail (layout != NULL);
|
||||
g_return_if_fail (cell_type_name != NULL);
|
||||
|
||||
cell = gnc_register_make_cell (cell_type_name);
|
||||
|
||||
gnc_basic_cell_set_name (cell, cell_name);
|
||||
gnc_basic_cell_set_sample_text (cell, sample_text);
|
||||
gnc_basic_cell_set_alignment (cell, alignment);
|
||||
gnc_basic_cell_set_expandable (cell, expandable);
|
||||
gnc_basic_cell_set_span (cell, span);
|
||||
|
||||
gnc_table_layout_add_cell (layout, cell);
|
||||
}
|
||||
|
||||
static void gnc_entry_ledger_layout_add_cells (GncEntryLedger *ledger,
|
||||
TableLayout *layout)
|
||||
{
|
||||
struct cell_list {
|
||||
const char *cell_name;
|
||||
const char *cell_type_name;
|
||||
const char *sample_text;
|
||||
CellAlignment alignment;
|
||||
gboolean expandable;
|
||||
gboolean span;
|
||||
} cells[] = {
|
||||
{ ENTRY_DATE_CELL, DATE_CELL_TYPE_NAME, N_("sample:12/12/2000")+7,
|
||||
CELL_ALIGN_RIGHT, FALSE, FALSE },
|
||||
{ ENTRY_DESC_CELL, QUICKFILL_CELL_TYPE_NAME,
|
||||
N_("sample:Description of an Entry")+7, CELL_ALIGN_LEFT, TRUE, FALSE },
|
||||
{ ENTRY_ACTN_CELL, COMBO_CELL_TYPE_NAME,
|
||||
N_("sample:Expenses:Automobile:Gasoline")+7, CELL_ALIGN_RIGHT,
|
||||
FALSE, FALSE },
|
||||
{ ENTRY_QTY_CELL, PRICE_CELL_TYPE_NAME, N_("sample:999,999.000") + 7,
|
||||
CELL_ALIGN_RIGHT, FALSE, FALSE },
|
||||
{ ENTRY_PRIC_CELL, PRICE_CELL_TYPE_NAME, N_("sample:999,999.000") + 7,
|
||||
CELL_ALIGN_RIGHT, FALSE, FALSE },
|
||||
{ ENTRY_TAX_CELL, PRICE_CELL_TYPE_NAME, N_("sample:999,999.000") + 7,
|
||||
CELL_ALIGN_RIGHT, FALSE, FALSE },
|
||||
{ ENTRY_DISC_CELL, PRICE_CELL_TYPE_NAME, N_("sample:999,999.000") + 7,
|
||||
CELL_ALIGN_RIGHT, FALSE, FALSE },
|
||||
{ ENTRY_ACCT_CELL, COMBO_CELL_TYPE_NAME, N_("sample:Transfer:Account")+7,
|
||||
CELL_ALIGN_LEFT, FALSE, FALSE },
|
||||
{ ENTRY_TAXACC_CELL, COMBO_CELL_TYPE_NAME, N_("sample:Tax:Account")+7,
|
||||
CELL_ALIGN_LEFT, FALSE, FALSE },
|
||||
{ ENTRY_TAXTYPE_CELL, COMBO_CELL_TYPE_NAME, N_("sample:TaxType")+7,
|
||||
CELL_ALIGN_LEFT, FALSE, FALSE },
|
||||
{ ENTRY_DISTYPE_CELL, COMBO_CELL_TYPE_NAME, N_("sample:DiscountType")+7,
|
||||
CELL_ALIGN_LEFT, FALSE, FALSE }
|
||||
};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < (sizeof(cells)/sizeof(*cells)); i++)
|
||||
gnc_register_add_cell (layout, cells[i].cell_name, cells[i].cell_type_name,
|
||||
cells[i].sample_text, cells[i].alignment,
|
||||
cells[i].expandable, cells[i].span);
|
||||
}
|
||||
|
||||
static void gnc_entry_ledger_layout_add_cursors (GncEntryLedger *ledger,
|
||||
TableLayout *layout)
|
||||
{
|
||||
CellBlock *cursor;
|
||||
int num_cols;
|
||||
|
||||
switch (ledger->type) {
|
||||
case GNCENTRY_LEDGER:
|
||||
case GNCENTRY_CHOOSER:
|
||||
num_cols = 11; /* ??? */
|
||||
break;
|
||||
default:
|
||||
g_assert (FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
cursor = gnc_cellblock_new (1, num_cols, CURSOR_HEADER);
|
||||
gnc_table_layout_add_cursor (layout, cursor);
|
||||
|
||||
cursor = gnc_cellblock_new (1, num_cols, "cursor");
|
||||
gnc_table_layout_add_cursor (layout, cursor);
|
||||
gnc_table_layout_set_primary_cursor (layout, cursor);
|
||||
}
|
||||
|
||||
static void gnc_entry_ledger_set_cells (GncEntryLedger *ledger,
|
||||
TableLayout *layout)
|
||||
{
|
||||
CellBlock *curs;
|
||||
CellBlock *curs_last;
|
||||
int x = 0;
|
||||
|
||||
switch (ledger->type) {
|
||||
case GNCENTRY_LEDGER:
|
||||
case GNCENTRY_CHOOSER:
|
||||
curs = gnc_table_layout_get_cursor (layout, "cursor");
|
||||
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_DATE_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_DESC_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_ACTN_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_ACCT_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_QTY_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_PRIC_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_DISTYPE_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_DISC_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_TAXTYPE_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_TAX_CELL, 0, x++);
|
||||
gnc_table_layout_set_cell (layout, curs, ENTRY_TAXACC_CELL, 0, x++);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert (FALSE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
TableLayout * gnc_entry_ledger_layout_new (GncEntryLedger *ledger)
|
||||
{
|
||||
TableLayout *layout;
|
||||
|
||||
layout = gnc_table_layout_new ();
|
||||
gnc_entry_ledger_layout_add_cells (ledger, layout);
|
||||
gnc_entry_ledger_layout_add_cursors (ledger, layout);
|
||||
gnc_entry_ledger_set_cells (ledger, layout);
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
|
||||
14
src/business/business-ledger/gncEntryLedgerLayout.h
Normal file
14
src/business/business-ledger/gncEntryLedgerLayout.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* gncEntryLedgerLayout.h -- Layout of GncEntry Manipulation Widget
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#ifndef GNC_ENTRY_LEDGER_LAYOUT_H
|
||||
#define GNC_ENTRY_LEDGER_LAYOUT_H
|
||||
|
||||
#include "gncEntryLedger.h"
|
||||
|
||||
TableLayout * gnc_entry_ledger_layout_new (GncEntryLedger *ledger);
|
||||
|
||||
#endif /* GNC_ENTRY_LEDGER_LAYOUT_H */
|
||||
605
src/business/business-ledger/gncEntryLedgerModel.c
Normal file
605
src/business/business-ledger/gncEntryLedgerModel.c
Normal file
@@ -0,0 +1,605 @@
|
||||
/*
|
||||
* gncEntryLedgerModel.c -- Model for GncEntry ledger
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include "messages.h"
|
||||
#include "Account.h"
|
||||
#include "gnc-ui-util.h"
|
||||
|
||||
#include "datecell.h"
|
||||
#include "pricecell.h"
|
||||
|
||||
#include "gncEntryLedgerP.h"
|
||||
#include "gncEntryLedgerModel.h"
|
||||
|
||||
/** Private Interfaces ***********************************************/
|
||||
|
||||
/* GET_LABEL */
|
||||
|
||||
static const char * get_acct_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Account");
|
||||
}
|
||||
|
||||
static const char * get_actn_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Action");
|
||||
}
|
||||
|
||||
static const char * get_date_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Date");
|
||||
}
|
||||
|
||||
static const char * get_desc_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Description");
|
||||
}
|
||||
|
||||
static const char * get_disc_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Discount");
|
||||
}
|
||||
|
||||
static const char * get_distype_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Discount Type");
|
||||
}
|
||||
|
||||
static const char * get_pric_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Price");
|
||||
}
|
||||
|
||||
static const char * get_qty_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Quantity");
|
||||
}
|
||||
|
||||
static const char * get_taxacc_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Tax Account");
|
||||
}
|
||||
|
||||
static const char * get_taxtype_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Tax Type");
|
||||
}
|
||||
|
||||
static const char * get_tax_label (VirtualLocation virt_loc, gpointer data)
|
||||
{
|
||||
return _("Tax");
|
||||
}
|
||||
|
||||
/* GET_ENTRY */
|
||||
|
||||
static const char * get_acct_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
static char *name = NULL;
|
||||
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
|
||||
g_free (name);
|
||||
name = xaccAccountGetFullName (gncEntryGetAccount (entry),
|
||||
gnc_get_account_separator ());
|
||||
return name;
|
||||
}
|
||||
|
||||
static const char * get_actn_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
return gncEntryGetAction (entry);
|
||||
}
|
||||
|
||||
static const char * get_date_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
Timespec ts;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
|
||||
ts = gncEntryGetDate (entry);
|
||||
return gnc_print_date (ts);
|
||||
}
|
||||
|
||||
static const char * get_desc_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
return gncEntryGetDescription (entry);
|
||||
}
|
||||
|
||||
static const char * get_disc_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
gnc_numeric discount;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
discount = gncEntryGetDiscount (entry);
|
||||
if (gnc_numeric_zero_p (discount))
|
||||
return NULL;
|
||||
|
||||
return xaccPrintAmount (discount, gnc_default_price_print_info ());
|
||||
}
|
||||
|
||||
static const char * get_distype_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
return gncEntryGetDiscountTypeStr (gncEntryGetDiscountType (entry));
|
||||
}
|
||||
|
||||
static const char * get_pric_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
gnc_numeric price;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
price = gncEntryGetPrice (entry);
|
||||
|
||||
if (gnc_numeric_zero_p (price))
|
||||
return NULL;
|
||||
|
||||
return xaccPrintAmount (price, gnc_default_price_print_info ());
|
||||
}
|
||||
|
||||
static const char * get_qty_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
gnc_numeric qty;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
qty = gncEntryGetQuantity (entry);
|
||||
|
||||
if (gnc_numeric_zero_p (qty))
|
||||
return NULL;
|
||||
|
||||
return xaccPrintAmount (qty, gnc_default_price_print_info ());
|
||||
}
|
||||
|
||||
static const char * get_taxacc_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
char * name = NULL;
|
||||
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
|
||||
g_free (name);
|
||||
name = xaccAccountGetFullName (gncEntryGetTaxAccount (entry),
|
||||
gnc_get_account_separator ());
|
||||
return name;
|
||||
}
|
||||
|
||||
static const char * get_taxtype_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
return gncEntryGetTaxTypeStr (gncEntryGetTaxType (entry));
|
||||
}
|
||||
|
||||
static const char * get_tax_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry;
|
||||
gnc_numeric tax;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
tax = gncEntryGetTax (entry);
|
||||
|
||||
if (gnc_numeric_zero_p (tax))
|
||||
return NULL;
|
||||
|
||||
return xaccPrintAmount (tax, gnc_default_price_print_info ());
|
||||
}
|
||||
|
||||
/* GET_HELP */
|
||||
|
||||
static char * get_acct_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
const char *help;
|
||||
GncEntryLedger *ledger = user_data;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Enter the income/expense account for the Entry, "
|
||||
"or choose one from the list");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_actn_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Enter the type of Entry");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_date_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
BasicCell *cell;
|
||||
char string[1024];
|
||||
struct tm *tm;
|
||||
Timespec ts;
|
||||
time_t tt;
|
||||
|
||||
cell = gnc_table_get_cell (ledger->table, virt_loc);
|
||||
if (!cell)
|
||||
return NULL;
|
||||
|
||||
if (!cell->value || *cell->value == '\0')
|
||||
return NULL;
|
||||
|
||||
gnc_date_cell_get_date ((DateCell *) cell, &ts);
|
||||
tt = ts.tv_sec;
|
||||
tm = localtime (&tt);
|
||||
strftime (string, sizeof(string), "%A %d %B %Y", tm);
|
||||
|
||||
return g_strdup (string);
|
||||
}
|
||||
|
||||
static char * get_desc_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Enter the Entry Description");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_disc_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
|
||||
if (GNC_ENTRY_INTERP_IS_VALUE (gncEntryGetDiscountType (entry)))
|
||||
help = _("Enter the Discount Amount");
|
||||
else
|
||||
help = _("Enter the Discount Percent");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_distype_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Select the Discount type");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_pric_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Enter the unit-Price for this Entry");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_qty_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Enter the Quantity of units for this Entry");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_taxacc_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Enter the Account for tax holdings or choose one from the list");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_taxtype_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
|
||||
help = gnc_table_get_entry (ledger->table, virt_loc);
|
||||
if (!help || *help == '\0')
|
||||
help = _("Select the Tax Type");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
static char * get_tax_help (VirtualLocation virt_loc, gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
const char *help;
|
||||
GncEntry *entry;
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
|
||||
if (GNC_ENTRY_INTERP_IS_VALUE (gncEntryGetDiscountType (entry)))
|
||||
help = _("Enter the Tax Amount");
|
||||
else
|
||||
help = _("Enter the Tax Percent");
|
||||
|
||||
return g_strdup (help);
|
||||
}
|
||||
|
||||
/* GET_IO_FLAGS */
|
||||
|
||||
static CellIOFlags get_standard_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
}
|
||||
|
||||
/* SAVE CELLS */
|
||||
|
||||
static void gnc_entry_ledger_save_cells (gpointer save_data,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GncEntry *entry = save_data;
|
||||
|
||||
g_return_if_fail (entry != NULL);
|
||||
|
||||
/* copy the contents from the cursor to the split */
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_ACCT_CELL, TRUE)) {
|
||||
Account *acc;
|
||||
|
||||
acc = gnc_entry_ledger_get_account (ledger, ENTRY_ACCT_CELL);
|
||||
|
||||
if (acc != NULL)
|
||||
gncEntrySetAccount (entry, acc);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_ACTN_CELL, TRUE)) {
|
||||
const char *value;
|
||||
|
||||
value = gnc_table_layout_get_cell_value (ledger->table->layout,
|
||||
ENTRY_ACTN_CELL);
|
||||
gncEntrySetAction (entry, value);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_DATE_CELL, TRUE)) {
|
||||
BasicCell *cell;
|
||||
Timespec ts;
|
||||
|
||||
cell = gnc_table_layout_get_cell (ledger->table->layout, ENTRY_DATE_CELL);
|
||||
|
||||
/* commit any pending changes */
|
||||
gnc_date_cell_commit ((DateCell *) cell);
|
||||
|
||||
gnc_date_cell_get_date ((DateCell *) cell, &ts);
|
||||
gncEntrySetDate (entry, &ts);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_DESC_CELL, TRUE)) {
|
||||
const char *value;
|
||||
|
||||
value = gnc_table_layout_get_cell_value (ledger->table->layout,
|
||||
ENTRY_DESC_CELL);
|
||||
gncEntrySetDescription (entry, value);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_DISC_CELL, TRUE)) {
|
||||
PriceCell *cell;
|
||||
gnc_numeric amount;
|
||||
|
||||
cell = (PriceCell *) gnc_table_layout_get_cell (ledger->table->layout,
|
||||
ENTRY_DISC_CELL);
|
||||
amount = gnc_price_cell_get_value (cell);
|
||||
gncEntrySetDiscount (entry, amount);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_DISTYPE_CELL, TRUE)) {
|
||||
gint type;
|
||||
|
||||
type = gnc_entry_ledger_get_type (ledger, ENTRY_DISTYPE_CELL);
|
||||
|
||||
if (type != -1)
|
||||
gncEntrySetDiscountType (entry, type);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_PRIC_CELL, TRUE)) {
|
||||
PriceCell *cell;
|
||||
gnc_numeric amount;
|
||||
|
||||
cell = (PriceCell *) gnc_table_layout_get_cell (ledger->table->layout,
|
||||
ENTRY_PRIC_CELL);
|
||||
amount = gnc_price_cell_get_value (cell);
|
||||
gncEntrySetPrice (entry, amount);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_QTY_CELL, TRUE)) {
|
||||
PriceCell *cell;
|
||||
gnc_numeric amount;
|
||||
|
||||
cell = (PriceCell *) gnc_table_layout_get_cell (ledger->table->layout,
|
||||
ENTRY_QTY_CELL);
|
||||
amount = gnc_price_cell_get_value (cell);
|
||||
gncEntrySetQuantity (entry, amount);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_TAXACC_CELL, TRUE)) {
|
||||
Account *acc;
|
||||
|
||||
acc = gnc_entry_ledger_get_account (ledger, ENTRY_TAXACC_CELL);
|
||||
|
||||
if (acc != NULL)
|
||||
gncEntrySetTaxAccount (entry, acc);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_TAXTYPE_CELL, TRUE)) {
|
||||
gint type;
|
||||
|
||||
type = gnc_entry_ledger_get_type (ledger, ENTRY_TAXTYPE_CELL);
|
||||
|
||||
if (type != -1)
|
||||
gncEntrySetTaxType (entry, type);
|
||||
}
|
||||
|
||||
if (gnc_table_layout_get_cell_changed (ledger->table->layout,
|
||||
ENTRY_TAX_CELL, TRUE)) {
|
||||
PriceCell *cell;
|
||||
gnc_numeric amount;
|
||||
|
||||
cell = (PriceCell *) gnc_table_layout_get_cell (ledger->table->layout,
|
||||
ENTRY_TAX_CELL);
|
||||
amount = gnc_price_cell_get_value (cell);
|
||||
gncEntrySetTax (entry, amount);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set Cell Handlers */
|
||||
|
||||
static void gnc_entry_ledger_model_new_handlers (TableModel *model)
|
||||
{
|
||||
struct model_desc {
|
||||
const char * cell;
|
||||
gpointer entry_handler;
|
||||
gpointer label_handler;
|
||||
gpointer help_handler;
|
||||
gpointer io_flags_handler;
|
||||
} models[] = {
|
||||
{ ENTRY_ACCT_CELL, get_acct_entry, get_acct_label, get_acct_help, get_standard_io_flags },
|
||||
{ ENTRY_ACTN_CELL, get_actn_entry, get_actn_label, get_actn_help, get_standard_io_flags },
|
||||
{ ENTRY_DATE_CELL, get_date_entry, get_date_label, get_date_help, get_standard_io_flags },
|
||||
{ ENTRY_DESC_CELL, get_desc_entry, get_desc_label, get_desc_help, get_standard_io_flags },
|
||||
{ ENTRY_DISC_CELL, get_disc_entry, get_disc_label, get_disc_help, get_standard_io_flags },
|
||||
{ ENTRY_DISTYPE_CELL, get_distype_entry, get_distype_label, get_distype_help, get_standard_io_flags },
|
||||
{ ENTRY_PRIC_CELL, get_pric_entry, get_pric_label, get_pric_help, get_standard_io_flags },
|
||||
{ ENTRY_QTY_CELL, get_qty_entry, get_qty_label, get_qty_help, get_standard_io_flags },
|
||||
{ ENTRY_TAXACC_CELL, get_taxacc_entry, get_taxacc_label, get_taxacc_help, get_standard_io_flags },
|
||||
{ ENTRY_TAXTYPE_CELL, get_taxtype_entry, get_taxtype_label, get_taxtype_help, get_standard_io_flags },
|
||||
{ ENTRY_TAX_CELL, get_tax_entry, get_tax_label, get_tax_help, get_standard_io_flags }
|
||||
};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < (sizeof(models)/sizeof(*models)); i++) {
|
||||
if (models[i].entry_handler)
|
||||
gnc_table_model_set_entry_handler (model, models[i].entry_handler,
|
||||
models[i].cell);
|
||||
if (models[i].label_handler)
|
||||
gnc_table_model_set_label_handler (model, models[i].label_handler,
|
||||
models[i].cell);
|
||||
if (models[i].help_handler)
|
||||
gnc_table_model_set_help_handler (model, models[i].help_handler,
|
||||
models[i].cell);
|
||||
if (models[i].io_flags_handler)
|
||||
gnc_table_model_set_io_flags_handler (model, models[i].io_flags_handler,
|
||||
models[i].cell);
|
||||
} /* for */
|
||||
|
||||
/*
|
||||
model->cell_data_allocator = ;
|
||||
model->cell_data_deallocator = ;
|
||||
model->cell_data_copy = ;
|
||||
*/
|
||||
|
||||
model->save_handler = gnc_entry_ledger_save_cells;
|
||||
}
|
||||
|
||||
/** Public Interface ***********************************************/
|
||||
|
||||
TableModel * gnc_entry_ledger_model_new (void)
|
||||
{
|
||||
TableModel * model;
|
||||
|
||||
model = gnc_table_model_new ();
|
||||
gnc_entry_ledger_model_new_handlers (model);
|
||||
|
||||
return model;
|
||||
}
|
||||
14
src/business/business-ledger/gncEntryLedgerModel.h
Normal file
14
src/business/business-ledger/gncEntryLedgerModel.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* gncEntryLedgerModel.h -- Model of GncEntry Manipulation Widget
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#ifndef GNC_ENTRY_LEDGER_MODEL_H
|
||||
#define GNC_ENTRY_LEDGER_MODEL_H
|
||||
|
||||
#include "gncEntryLedger.h"
|
||||
|
||||
TableModel * gnc_entry_ledger_model_new (void);
|
||||
|
||||
#endif /* GNC_ENTRY_LEDGER_MODEL_H */
|
||||
26
src/business/business-ledger/gncEntryLedgerP.h
Normal file
26
src/business/business-ledger/gncEntryLedgerP.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* gncEntryLedgerP.h -- a ledger widget for manipulating GncEntry's
|
||||
* Copyright (C) 2001 Derek Atkins
|
||||
* Author: Derek Atkins <warlord@MIT.EDU>
|
||||
*/
|
||||
|
||||
#ifndef GNC_ENTRY_LEDGERP_H
|
||||
#define GNC_ENTRY_LEDGERP_H
|
||||
|
||||
#include "gnc-book.h"
|
||||
#include "table-allgui.h"
|
||||
#include "gncEntryLedger.h"
|
||||
|
||||
struct GncEntryLedger_s {
|
||||
GNCBook *book;
|
||||
Table *table;
|
||||
GncEntryLedgerType type;
|
||||
};
|
||||
|
||||
GncEntry * gnc_entry_ledger_get_entry (GncEntryLedger *ledger,
|
||||
VirtualCellLocation vcell_loc);
|
||||
Account * gnc_entry_ledger_get_account (GncEntryLedger *ledger,
|
||||
const char * cell_name);
|
||||
gint gnc_entry_ledger_get_type (GncEntryLedger *ledger, const char * cell_name);
|
||||
|
||||
#endif /* GNC_ENTRY_LEDGERP_H */
|
||||
Reference in New Issue
Block a user