From 8d966b080dd02ce62a0f0600e3064472875a16eb Mon Sep 17 00:00:00 2001 From: Dave Peticolas Date: Thu, 22 Jun 2000 05:54:11 +0000 Subject: [PATCH] Clean up register code. Separate register type and register style. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2496 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 4 ++ src/MultiLedger.c | 30 ++++++------- src/MultiLedger.h | 6 ++- src/SplitLedger.c | 63 +++++++++++++--------------- src/gnome/dialog-find-transactions.c | 8 ++-- src/gnome/window-register.c | 53 ++++++++--------------- src/register/gnome/gnucash-style.c | 2 +- src/register/splitreg.c | 41 +++++++++--------- src/register/splitreg.h | 39 ++++++++++------- 9 files changed, 118 insertions(+), 128 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6163b33421..f0b0649e74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2000-06-21 Dave Peticolas + * src/register/splitreg.h: break out the register type and the + register style into two separate struct members, instead of using + bitmasks. This is much, much simpler. + * src/optional/swig/Makefile.am (gnucash-engine-perl5_wrap.c): remove the -stat argument, it's no longer support in later swig versions. diff --git a/src/MultiLedger.c b/src/MultiLedger.c index 040da7923d..f149287ec5 100644 --- a/src/MultiLedger.c +++ b/src/MultiLedger.c @@ -153,9 +153,8 @@ ledgerIsMember (xaccLedgerDisplay *reg, Account * acc) xaccLedgerDisplay * xaccLedgerDisplaySimple (Account *acc) { - xaccLedgerDisplay *retval; - int acc_type; - int reg_type = -1; + SplitRegisterType reg_type; + GNCAccountType acc_type; acc_type = xaccAccountGetType (acc); @@ -197,11 +196,7 @@ xaccLedgerDisplaySimple (Account *acc) return NULL; } - /* default to single-line display */ - reg_type |= REG_SINGLE_LINE; - - retval = xaccLedgerDisplayGeneral (acc, NULL, reg_type); - return retval; + return xaccLedgerDisplayGeneral (acc, NULL, reg_type, REG_SINGLE_LINE); } /********************************************************************\ @@ -216,12 +211,13 @@ xaccLedgerDisplaySimple (Account *acc) xaccLedgerDisplay * xaccLedgerDisplayAccGroup (Account *acc) { + SplitRegisterType ledger_type; xaccLedgerDisplay *retval; + GNCAccountType acc_type; + GNCAccountType le_type; Account **list; - int ledger_type; Account *le; int n; - int acc_type, le_type; /* build a flat list from the tree */ list = xaccGroupToList (acc); @@ -270,12 +266,10 @@ xaccLedgerDisplayAccGroup (Account *acc) return NULL; } - /* default to single-line display */ - ledger_type |= REG_SINGLE_LINE; - - retval = xaccLedgerDisplayGeneral (acc, list, ledger_type); + retval = xaccLedgerDisplayGeneral (acc, list, ledger_type, REG_SINGLE_LINE); if (list) _free (list); + return retval; } @@ -320,7 +314,7 @@ xaccLedgerDisplaySetHelp(void *user_data, const char *help_str) xaccLedgerDisplay * xaccLedgerDisplayGeneral (Account *lead_acc, Account **acclist, - int ledger_type) + SplitRegisterType type, SplitRegisterStyle style) { xaccLedgerDisplay *regData = NULL; gboolean show_all; @@ -373,7 +367,7 @@ xaccLedgerDisplayGeneral (Account *lead_acc, Account **acclist, * and then, store them. */ regData->numAcc = accListCount (acclist); regData->displayed_accounts = accListCopy (acclist); - regData->type = ledger_type; + regData->type = type; show_all = gnc_lookup_boolean_option("Register", "Show All Transactions", @@ -386,7 +380,7 @@ xaccLedgerDisplayGeneral (Account *lead_acc, Account **acclist, * configurable, or maybe we should go back a time range instead * of picking a number, or maybe we should be able to exclude * based on reconciled status. Anyway, this works for now. */ - if (!show_all && ((ledger_type & REG_TYPE_MASK) != SEARCH_LEDGER)) + if (!show_all && (type != SEARCH_LEDGER)) xaccQuerySetMaxSplits(regData->query, 30); xaccQuerySetGroup(regData->query, gncGetCurrentGroup()); @@ -410,7 +404,7 @@ xaccLedgerDisplayGeneral (Account *lead_acc, Account **acclist, /* xaccMallocSplitRegister will malloc & initialize the register, * but will not do the gui init */ - regData->ledger = xaccMallocSplitRegister (ledger_type); + regData->ledger = xaccMallocSplitRegister (type, style); xaccSRSetData(regData->ledger, regData, xaccLedgerDisplayParent, diff --git a/src/MultiLedger.h b/src/MultiLedger.h index 97a7a5e868..79d5e66559 100644 --- a/src/MultiLedger.h +++ b/src/MultiLedger.h @@ -46,8 +46,9 @@ struct _xaccLedgerDisplay { short numAcc; /* number of accounts in list */ Query *query; /* query engine & filter for displaying */ - short type; /* register display type, usually equal to * + SplitRegisterType type; /* register display type, usually equal to * * account type, but not always. */ + double balance; /* balance */ double clearedBalance; double reconciledBalance; @@ -81,7 +82,8 @@ xaccLedgerDisplay * xaccLedgerDisplayAccGroup (Account *acc); */ xaccLedgerDisplay * xaccLedgerDisplayGeneral (Account *lead_acc, Account **acclist, - int ledger_type); + SplitRegisterType type, + SplitRegisterStyle style); /* * redisplay/redraw all windows that contain any transactions diff --git a/src/SplitLedger.c b/src/SplitLedger.c index 50c58af3d1..cec02eed8c 100644 --- a/src/SplitLedger.c +++ b/src/SplitLedger.c @@ -642,7 +642,6 @@ LedgerMoveCursor (Table *table, int new_cell_col; int phys_row_offset; int phys_col_offset; - int style; PINFO ("start callback %d %d \n", new_phys_row, new_phys_col); @@ -759,9 +758,8 @@ LedgerMoveCursor (Table *table, * to expand out the splits at the new location. We use the * cursor_hint data members to tell the refresh routine where * to go. */ - style = ((reg->type) & REG_STYLE_MASK); - if ((REG_SINGLE_DYNAMIC == style) || - (REG_DOUBLE_DYNAMIC == style)) + if ((REG_SINGLE_DYNAMIC == reg->style) || + (REG_DOUBLE_DYNAMIC == reg->style)) { new_trans = xaccSRGetTrans(reg, new_phys_row, new_phys_col); info->cursor_hint_trans = new_trans; @@ -808,6 +806,7 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir, SRInfo *info = xaccSRGetInfo(reg); Split *blank_split = xaccSplitLookup(&info->blank_split_guid); Transaction *pending_trans = xaccTransLookup(&info->pending_trans_guid); + SplitRegisterType reg_type; CursorType cursor_type; unsigned int changed; CellType cell_type; @@ -826,6 +825,7 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir, if (trans == NULL) return; + reg_type = reg->type; cursor_type = xaccSplitRegisterGetCursorType(reg); cell_type = xaccSplitRegisterGetCellType(reg); changed = xaccSplitRegisterGetChangeFlag(reg); @@ -940,7 +940,6 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir, break; case CURSOR_SPLIT: { - SplitRegisterType typo = reg->type & REG_TYPE_MASK; char *memo, *fullname; gboolean unit_price; Split *auto_split; @@ -999,9 +998,9 @@ LedgerAutoCompletion(SplitRegister *reg, gncTableTraversalDir dir, xaccBasicCellSetChanged(&(reg->xfrmCell->cell), GNC_T); /* auto-complete the amounts */ - if ((STOCK_REGISTER == typo) || - (CURRENCY_REGISTER == typo) || - (PORTFOLIO_LEDGER == typo)) + if ((STOCK_REGISTER == reg_type) || + (CURRENCY_REGISTER == reg_type) || + (PORTFOLIO_LEDGER == reg_type)) amount = xaccSplitGetShareAmount (auto_split); else amount = xaccSplitGetValue (auto_split); @@ -2181,7 +2180,6 @@ xaccSRSaveRegEntryToSCM (SplitRegister *reg, SCM trans_scm, SCM split_scm) { Transaction *trans; unsigned int changed; - int style; /* use the changed flag to avoid heavy-weight updates * of the split & transaction fields. This will help @@ -2190,8 +2188,6 @@ xaccSRSaveRegEntryToSCM (SplitRegister *reg, SCM trans_scm, SCM split_scm) if (!changed) return GNC_F; - style = (reg->type) & REG_STYLE_MASK; - /* get the handle to the current split and transaction */ trans = xaccSRGetCurrentTrans (reg); if (trans == NULL) @@ -2301,9 +2297,9 @@ xaccSRSaveRegEntryToSCM (SplitRegister *reg, SCM trans_scm, SCM split_scm) price = gnc_split_scm_get_share_price(split_scm); - if ((STOCK_REGISTER == (reg->type & REG_TYPE_MASK)) || - (CURRENCY_REGISTER == (reg->type & REG_TYPE_MASK)) || - (PORTFOLIO_LEDGER == (reg->type & REG_TYPE_MASK))) + if ((STOCK_REGISTER == (reg->type)) || + (CURRENCY_REGISTER == (reg->type)) || + (PORTFOLIO_LEDGER == (reg->type))) ; else new_amount = new_amount / price; @@ -2486,10 +2482,8 @@ xaccSRSaveChangedCells (SplitRegister *reg, Transaction *trans, Split *split) { GList *refresh_accounts = NULL; unsigned int changed; - int style; changed = xaccSplitRegisterGetChangeFlag (reg); - style = (reg->type) & REG_STYLE_MASK; /* copy the contents from the cursor to the split */ if (MOD_DATE & changed) { @@ -2676,9 +2670,9 @@ xaccSRSaveChangedCells (SplitRegister *reg, Transaction *trans, Split *split) } if (((MOD_AMNT | MOD_PRIC | MOD_VALU) & changed) && - ((STOCK_REGISTER == (reg->type & REG_TYPE_MASK)) || - (CURRENCY_REGISTER == (reg->type & REG_TYPE_MASK)) || - (PORTFOLIO_LEDGER == (reg->type & REG_TYPE_MASK)))) { + ((STOCK_REGISTER == (reg->type)) || + (CURRENCY_REGISTER == (reg->type)) || + (PORTFOLIO_LEDGER == (reg->type)))) { double value; double price; @@ -2803,9 +2797,9 @@ xaccSRSaveChangedCells (SplitRegister *reg, Transaction *trans, Split *split) DEBUG ("MOD_AMNT: %f\n", new_amount); - if ((STOCK_REGISTER == (reg->type & REG_TYPE_MASK)) || - (CURRENCY_REGISTER == (reg->type & REG_TYPE_MASK)) || - (PORTFOLIO_LEDGER == (reg->type & REG_TYPE_MASK))) + if ((STOCK_REGISTER == (reg->type)) || + (CURRENCY_REGISTER == (reg->type)) || + (PORTFOLIO_LEDGER == (reg->type))) xaccSplitSetShareAmount (split, new_amount); else xaccSplitSetValue (split, new_amount); @@ -2839,7 +2833,7 @@ xaccSRLoadRegEntry (SplitRegister *reg, Split *split) { SRInfo *info = xaccSRGetInfo(reg); Split *blank_split = xaccSplitLookup(&info->blank_split_guid); - int typo = reg->type & REG_TYPE_MASK; + SplitRegisterType reg_type = reg->type; char buff[2]; double baln; @@ -2899,8 +2893,8 @@ xaccSRLoadRegEntry (SplitRegister *reg, Split *split) if (reverse_balance(account)) baln = -baln; } - else if ((INCOME_REGISTER == typo) || - (EXPENSE_REGISTER == typo)) { + else if ((INCOME_REGISTER == reg_type) || + (EXPENSE_REGISTER == reg_type)) { baln = -baln; } @@ -2969,9 +2963,9 @@ xaccSRLoadRegEntry (SplitRegister *reg, Split *split) buff[1] = 0x0; xaccSetBasicCellValue (reg->recnCell, buff); - if ((STOCK_REGISTER == typo) || - (CURRENCY_REGISTER == typo) || - (PORTFOLIO_LEDGER == typo)) + if ((STOCK_REGISTER == reg_type) || + (CURRENCY_REGISTER == reg_type) || + (PORTFOLIO_LEDGER == reg_type)) { amt = xaccSplitGetShareAmount (split); } else { @@ -2984,7 +2978,7 @@ xaccSRLoadRegEntry (SplitRegister *reg, Split *split) xaccSetPriceCellValue (reg->valueCell, xaccSplitGetValue (split)); } - reg->table->current_cursor->user_data = (void *) split; + reg->table->current_cursor->user_data = split; /* copy cursor contents into the table */ xaccCommitCursor (reg->table); @@ -3022,16 +3016,16 @@ xaccSRCountRows (SplitRegister *reg, gncBoolean multi_line; gncBoolean dynamic; + SplitRegisterStyle style; int save_cursor_phys_row; int save_cursor_virt_row; int save_cell_row; int num_phys_rows; int num_virt_rows; - int style; int i; table = reg->table; - style = (reg->type) & REG_STYLE_MASK; + style = reg->style; multi_line = (REG_MULTI_LINE == style); dynamic = ((REG_SINGLE_DYNAMIC == style) || (REG_DOUBLE_DYNAMIC == style)); if ((REG_SINGLE_LINE == style) || @@ -3329,9 +3323,10 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist, gncBoolean multi_line; gncBoolean dynamic; + SplitRegisterType type; + SplitRegisterStyle style; unsigned int changed; int save_phys_col; - int type, style; int phys_row; int vrow; int i; @@ -3357,8 +3352,8 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist, info->default_source_account = default_source_acc; table = reg->table; - type = (reg->type) & REG_TYPE_MASK; - style = (reg->type) & REG_STYLE_MASK; + type = reg->type; + style = reg->style; multi_line = (REG_MULTI_LINE == style); dynamic = ((REG_SINGLE_DYNAMIC == style) || (REG_DOUBLE_DYNAMIC == style)); if ((REG_SINGLE_LINE == style) || diff --git a/src/gnome/dialog-find-transactions.c b/src/gnome/dialog-find-transactions.c index 9547113d73..e86d2ece8a 100644 --- a/src/gnome/dialog-find-transactions.c +++ b/src/gnome/dialog-find-transactions.c @@ -585,10 +585,12 @@ gnc_ui_find_transactions_dialog_ok_cb(GtkButton * button, if(!ftd->ledger) { new_ledger = TRUE; - ftd->ledger = xaccLedgerDisplayGeneral(NULL, NULL, SEARCH_LEDGER); - xaccFreeQuery(ftd->ledger->query); + ftd->ledger = xaccLedgerDisplayGeneral(NULL, NULL, + SEARCH_LEDGER, + REG_SINGLE_LINE); + xaccFreeQuery(ftd->ledger->query); } - + switch(search_type) { case 0: ftd->ledger->query = q; diff --git a/src/gnome/window-register.c b/src/gnome/window-register.c index e0c1cabefd..9610bae77e 100644 --- a/src/gnome/window-register.c +++ b/src/gnome/window-register.c @@ -231,14 +231,11 @@ gnc_register_jump_to_split(RegWindow *regData, Split *split) } -static int -gnc_register_get_default_type(SplitRegister *reg) +static SplitRegisterStyle +gnc_get_default_register_style() { + SplitRegisterStyle new_style = REG_SINGLE_LINE; char *style_string; - int new_style = REG_SINGLE_LINE; - int type = reg->type; - - type &= ~REG_STYLE_MASK; style_string = gnc_lookup_multichoice_option("Register", "Default Register Mode", @@ -255,25 +252,19 @@ gnc_register_get_default_type(SplitRegister *reg) else if (safe_strcmp(style_string, "auto_double") == 0) new_style = REG_DOUBLE_DYNAMIC; - type |= new_style; - if (style_string != NULL) free(style_string); - return type; + return new_style; } static void -gnc_register_change_style(RegWindow *regData, int style_code) +gnc_register_change_style(RegWindow *regData, SplitRegisterStyle style) { SplitRegister *reg = regData->ledger->ledger; - int type = reg->type; - type &= ~REG_STYLE_MASK; - type |= style_code; - - xaccConfigSplitRegister(reg, type); + xaccConfigSplitRegister(reg, reg->type, style); regData->ledger->dirty = 1; xaccLedgerDisplayRefresh(regData->ledger); @@ -892,7 +883,7 @@ gnc_register_create_status_bar(RegWindow *regData) regData->statusbar = statusbar; - switch (regData->ledger->ledger->type & REG_TYPE_MASK) + switch (regData->ledger->type) { case GENERAL_LEDGER: case INCOME_LEDGER: @@ -1318,12 +1309,8 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar) { GtkWidget *widget; int index; - int style; - - style = gnc_register_get_default_type(regData->ledger->ledger); - style &= REG_STYLE_MASK; - switch (style) + switch (gnc_get_default_register_style()) { default: case REG_SINGLE_LINE: @@ -1430,11 +1417,9 @@ gnc_register_record_cb(GnucashRegister *reg, gpointer data) * when you are entering transactions. */ { SplitRegister *sr = regData->ledger->ledger; - int type = sr->type; + SplitRegisterStyle style = sr->style; - type &= REG_STYLE_MASK; - - if ((type == REG_SINGLE_LINE) || (type == REG_DOUBLE_LINE)) + if ((style == REG_SINGLE_LINE) || (style == REG_DOUBLE_LINE)) { Split *blank_split; @@ -1496,7 +1481,7 @@ gnc_reg_set_window_name(RegWindow *regData) if (regData == NULL) return; - switch (regData->ledger->type & REG_TYPE_MASK) + switch (regData->ledger->type) { case GENERAL_LEDGER: case INCOME_LEDGER: @@ -1667,19 +1652,17 @@ regWindowLedger(xaccLedgerDisplay *ledger) } /* be sure to initialize the gui elements associated with the cursor */ - xaccConfigSplitRegister(ledger->ledger, - gnc_register_get_default_type(ledger->ledger)); + xaccConfigSplitRegister(ledger->ledger, ledger->type, + gnc_get_default_register_style()); /* Allow grow, allow shrink, auto-shrink */ gtk_window_set_policy(GTK_WINDOW(register_window), TRUE, TRUE, TRUE); { - int type; int *width; char *prefix; - type = ledger->ledger->type & REG_TYPE_MASK; - switch (type) + switch (ledger->type) { case STOCK_REGISTER: case PORTFOLIO_LEDGER: @@ -1798,7 +1781,7 @@ gnc_reg_save_size(RegWindow *regData) int *width; char *prefix; - switch (regData->ledger->ledger->type & REG_TYPE_MASK) + switch (regData->ledger->type) { case STOCK_REGISTER: case PORTFOLIO_LEDGER: @@ -2261,13 +2244,13 @@ gnc_transaction_delete_query(GtkWindow *parent) static void deleteCB(GtkWidget *widget, gpointer data) { - RegWindow *regData = (RegWindow *) data; + RegWindow *regData = data; + SplitRegisterStyle style; CursorType cursor_type; Transaction *trans; char *buf = NULL; Split *split; gint result; - int style; /* get the current split based on cursor position */ split = xaccSRGetCurrentSplit(regData->ledger->ledger); @@ -2278,7 +2261,7 @@ deleteCB(GtkWidget *widget, gpointer data) } trans = xaccSplitGetParent(split); - style = regData->ledger->ledger->type & REG_STYLE_MASK; + style = regData->ledger->ledger->style; cursor_type = xaccSplitRegisterGetCursorType(regData->ledger->ledger); /* Deleting the blank split just cancels */ diff --git a/src/register/gnome/gnucash-style.c b/src/register/gnome/gnucash-style.c index a1de06db17..3a9200803f 100644 --- a/src/register/gnome/gnucash-style.c +++ b/src/register/gnome/gnucash-style.c @@ -1384,7 +1384,7 @@ gnucash_sheet_style_compile (GnucashSheet *sheet, CellBlock *cellblock, style = g_new0(SheetBlockStyle, 1); - style->reg_type = sr->type & REG_TYPE_MASK; + style->reg_type = sr->type; style->cursor_type = cursor_type; style->nrows = cellblock->numRows; diff --git a/src/register/splitreg.c b/src/register/splitreg.c index 86d474fb47..de4a7b68dc 100644 --- a/src/register/splitreg.c +++ b/src/register/splitreg.c @@ -168,10 +168,12 @@ xaccSplitRegisterSetCreditStringGetter(SRStringGetter getter) static void configLabels (SplitRegister *reg) { + SplitRegisterType type; BasicCell *hc; - int type = (reg->type) & REG_TYPE_MASK; char *string; + type = reg->type; + LABEL (DATE, DATE_STR); LABEL (NUM, NUM_STR); LABEL (DESC, DESC_STR); @@ -222,10 +224,8 @@ configLabels (SplitRegister *reg) static void configAction (SplitRegister *reg) { - int type = (reg->type) & REG_TYPE_MASK; - /* setup strings in the action pull-down */ - switch (type) { + switch (reg->type) { case BANK_REGISTER: case SEARCH_LEDGER: /* broken ! FIXME bg */ xaccAddComboCellMenuItem ( reg->actionCell, DEPOSIT_STR); @@ -346,7 +346,6 @@ static void configLayout (SplitRegister *reg) { CellBlock *curs, *header; - int type = (reg->type) & REG_TYPE_MASK; int i; /* define header for macros */ @@ -362,7 +361,7 @@ configLayout (SplitRegister *reg) reg->double_cursor->cells[1][i] = reg->nullCell; } - switch (type) { + switch (reg->type) { case BANK_REGISTER: case CASH_REGISTER: case ASSET_REGISTER: @@ -576,7 +575,7 @@ configLayout (SplitRegister *reg) /* --------------------------------------------------------- */ default: - PERR ("unknown register type %d \n", type); + PERR ("unknown register type %d \n", reg->type); break; } } @@ -816,11 +815,13 @@ configTraverse (SplitRegister *reg) /* ============================================== */ SplitRegister * -xaccMallocSplitRegister (int type) +xaccMallocSplitRegister (SplitRegisterType type, SplitRegisterStyle style) { SplitRegister * reg; - reg = (SplitRegister *) malloc (sizeof (SplitRegister)); - xaccInitSplitRegister (reg, type); + + reg = malloc (sizeof (SplitRegister)); + xaccInitSplitRegister (reg, type, style); + return reg; } @@ -837,12 +838,10 @@ xaccSetSplitRegisterColors (SplitRegisterColors reg_colors_new) static void configTable(SplitRegister *reg) { - int style = reg->type & REG_STYLE_MASK; - if ((reg == NULL) || (reg->table == NULL)) return; - switch (style) { + switch (reg->style) { case REG_SINGLE_LINE: case REG_SINGLE_DYNAMIC: reg->table->alternate_bg_colors = GNC_T; @@ -910,9 +909,7 @@ configCursors (SplitRegister *reg) static void mallocCursors (SplitRegister *reg) { - int type = (reg->type) & REG_TYPE_MASK; - - switch (type) { + switch (reg->type) { case BANK_REGISTER: case CASH_REGISTER: case ASSET_REGISTER: @@ -968,7 +965,9 @@ mallocCursors (SplitRegister *reg) reg->CN##Cell = xaccMalloc##TYPE##Cell(); \ void -xaccInitSplitRegister (SplitRegister *reg, int type) +xaccInitSplitRegister (SplitRegister *reg, + SplitRegisterType type, + SplitRegisterStyle style) { Table * table; CellBlock *header; @@ -978,6 +977,7 @@ xaccInitSplitRegister (SplitRegister *reg, int type) reg->user_data = NULL; reg->destroy = NULL; reg->type = type; + reg->style = style; /* --------------------------- */ /* define the number of columns in the display, malloc the cursors */ @@ -1107,7 +1107,7 @@ xaccInitSplitRegister (SplitRegister *reg, int type) xaccSetBasicCellBlankHelp (®->actionCell->cell, ACTION_CELL_HELP); /* number format for share quantities in stock ledgers */ - switch (type & REG_TYPE_MASK) { + switch (type) { case CURRENCY_REGISTER: xaccSetPriceCellIsCurrency (reg->priceCell, GNC_T); @@ -1173,11 +1173,14 @@ xaccInitSplitRegister (SplitRegister *reg, int type) /* ============================================== */ void -xaccConfigSplitRegister (SplitRegister *reg, int newtype) +xaccConfigSplitRegister (SplitRegister *reg, + SplitRegisterType newtype, + SplitRegisterStyle newstyle) { if (!reg) return; reg->type = newtype; + reg->style = newstyle; /* Make sure that any GUI elements associated with this reconfig * are properly initialized. */ diff --git a/src/register/splitreg.h b/src/register/splitreg.h index 601d097293..d563c5137f 100644 --- a/src/register/splitreg.h +++ b/src/register/splitreg.h @@ -80,8 +80,6 @@ typedef enum SEARCH_LEDGER = 14 } SplitRegisterType; -#define REG_TYPE_MASK 0xff - /* These values are used to identify the cells in the register. */ typedef enum { @@ -119,12 +117,14 @@ typedef enum * REG_DOUBLE_DYNAMIC -- dynamically expand edited transaction, * all other transactions on two lines */ -#define REG_SINGLE_LINE (1 << 8) -#define REG_DOUBLE_LINE (2 << 8) -#define REG_MULTI_LINE (3 << 8) -#define REG_SINGLE_DYNAMIC (4 << 8) -#define REG_DOUBLE_DYNAMIC (5 << 8) -#define REG_STYLE_MASK (0xff << 8) +typedef enum +{ + REG_SINGLE_LINE = 1, + REG_DOUBLE_LINE = 2, + REG_MULTI_LINE = 3, + REG_SINGLE_DYNAMIC = 4, + REG_DOUBLE_DYNAMIC = 5 +} SplitRegisterStyle; /* modified flags -- indicate which cell values have been modified by user */ #define MOD_NONE 0x0000 @@ -193,9 +193,11 @@ struct _SplitRegister { PriceCell * ncreditCell; PriceCell * ndebitCell; - /* the type of the register, must be one of the enumerated types - * above *_REGISTER, *_LEDGER, above */ - int type; + /* The type of the register, must be one of the enumerated types + * named *_REGISTER, *_LEDGER, above */ + SplitRegisterType type; + + SplitRegisterStyle style; /* some private data; outsiders should not access this */ int num_cols; @@ -247,16 +249,21 @@ typedef char* (*SRStringGetter) (SplitRegisterType); void xaccSplitRegisterSetDebitStringGetter(SRStringGetter getter); void xaccSplitRegisterSetCreditStringGetter(SRStringGetter getter); -SplitRegister * xaccMallocSplitRegister (int type); -void xaccInitSplitRegister (SplitRegister *, int type); -void xaccConfigSplitRegister (SplitRegister *, int type); -void xaccDestroySplitRegister (SplitRegister *); +SplitRegister * xaccMallocSplitRegister (SplitRegisterType type, + SplitRegisterStyle style); +void xaccInitSplitRegister (SplitRegister *reg, + SplitRegisterType type, + SplitRegisterStyle style); +void xaccConfigSplitRegister (SplitRegister *reg, + SplitRegisterType type, + SplitRegisterStyle style); +void xaccDestroySplitRegister (SplitRegister *reg); void xaccSetSplitRegisterColors (SplitRegisterColors reg_colors); void xaccSplitRegisterConfigColors (SplitRegister *reg); /* returns non-zero value if updates have been made to data */ -unsigned int xaccSplitRegisterGetChangeFlag (SplitRegister *); +unsigned int xaccSplitRegisterGetChangeFlag (SplitRegister *reg); /* Clears all change flags in the register. Does not alter values */ void xaccSplitRegisterClearChangeFlag (SplitRegister *reg);