diff --git a/.gitignore b/.gitignore index a7551c8a34..3b294c108d 100644 --- a/.gitignore +++ b/.gitignore @@ -255,3 +255,4 @@ DerivedData/ *.mode2v3 *.perspectivev3 xcuserdata/ +messages.mo diff --git a/accounts/en_GB/uk-vat.gnucash-xea b/accounts/en_GB/uk-vat.gnucash-xea index 7242f9ba2f..c032134a44 100644 --- a/accounts/en_GB/uk-vat.gnucash-xea +++ b/accounts/en_GB/uk-vat.gnucash-xea @@ -192,7 +192,7 @@ VAT 3352145930e40b21fee20532ad07501b - EXPENSE + LIABILITY ISO4217 GBP @@ -214,7 +214,7 @@ Input d3fda498135dbfca02febf0fbe379069 - EXPENSE + ASSSET ISO4217 GBP @@ -226,7 +226,7 @@ Output a46d9e9624070fcd2427973a4c725ed6 - EXPENSE + LIABILITY ISO4217 GBP @@ -244,7 +244,7 @@ EC 37d726ec68d451d098496b7f5513f6f8 - EXPENSE + LIABILITY ISO4217 GBP @@ -256,7 +256,7 @@ Sales 61bdfc571cdbf2259d99078fe75527a4 - EXPENSE + LIABILITY ISO4217 GBP diff --git a/src/app-utils/gfec.c b/src/app-utils/gfec.c index 50c361edb8..94f6876db9 100644 --- a/src/app-utils/gfec.c +++ b/src/app-utils/gfec.c @@ -5,26 +5,6 @@ * gfec stands for 'guile fancy error catching'. * This code is in the public domain. */ -/********************************************************************\ - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 2 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License* - * along with this program; if not, contact: * - * * - * Free Software Foundation Voice: +1-617-542-5942 * - * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 * - * Boston, MA 02110-1301, USA gnu@gnu.org * - * * -\********************************************************************/ - #include #include @@ -261,4 +241,3 @@ gfec_try_load(gchar *fn) } return FALSE; } - diff --git a/src/app-utils/gfec.h b/src/app-utils/gfec.h index 205a4de309..16852cad2b 100644 --- a/src/app-utils/gfec.h +++ b/src/app-utils/gfec.h @@ -5,26 +5,6 @@ * gfec stands for 'guile fancy error catching'. * This code is in the public domain. */ -/********************************************************************\ - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 2 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License* - * along with this program; if not, contact: * - * * - * Free Software Foundation Voice: +1-617-542-5942 * - * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 * - * Boston, MA 02110-1301, USA gnu@gnu.org * - * * -\********************************************************************/ - #ifndef GFEC_H #define GFEC_H diff --git a/src/backend/sql/gnc-price-sql.c b/src/backend/sql/gnc-price-sql.c index 92a5176e0e..83c5f3d1e6 100644 --- a/src/backend/sql/gnc-price-sql.c +++ b/src/backend/sql/gnc-price-sql.c @@ -203,7 +203,7 @@ write_price( GNCPrice* p, gpointer data ) g_return_val_if_fail( p != NULL, FALSE ); g_return_val_if_fail( data != NULL, FALSE ); - if ( s->is_ok && gnc_price_get_source(p) == PRICE_SOURCE_INVOICE) + if ( s->is_ok && gnc_price_get_source(p) != PRICE_SOURCE_INVOICE) { s->is_ok = save_price( s->be, QOF_INSTANCE(p) ); } diff --git a/src/business/business-ledger/gncEntryLedger.h b/src/business/business-ledger/gncEntryLedger.h index 3a7532d024..f6a5a227e1 100644 --- a/src/business/business-ledger/gncEntryLedger.h +++ b/src/business/business-ledger/gncEntryLedger.h @@ -28,7 +28,13 @@ #include "gncEntry.h" #include "gncOrder.h" #include "table-allgui.h" - +/** @ingroup Register + * @addtogroup BusinessRegister Business Register + * @brief A specialized register for Accounts Payable and Accounts Receivable. + * @{ + */ +/** @file gncEntryLedger.h + */ typedef enum { GNC_ENTRY_ORDER_NONE = -1, //Force clang to use int representation of enum. @@ -72,31 +78,31 @@ typedef enum typedef struct GncEntryLedger_s GncEntryLedger; -/** Prototypes ***************************************************/ +/* Prototypes ***************************************************/ -/* Create and return a new GncEntry Ledger */ +/** Create and return a new GncEntry Ledger */ GncEntryLedger * gnc_entry_ledger_new (QofBook *book, GncEntryLedgerType type); -/* Set the default order for this ledger */ +/** Set the default order for this ledger */ void gnc_entry_ledger_set_default_order (GncEntryLedger *ledger, GncOrder *order); -/* Set the default invoice for this ledger */ +/** Set the default invoice for this ledger */ void gnc_entry_ledger_set_default_invoice (GncEntryLedger *ledger, GncInvoice *invoice); -/* Destroy the GncEntry Ledger */ +/** Destroy the GncEntry Ledger */ void gnc_entry_ledger_destroy (GncEntryLedger *ledger); -/* Returns the Entry where the cursor is currently located. */ +/** 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. */ +/** Copy GncEntry information from the list to the rows of the Ledger. */ void gnc_entry_ledger_load (GncEntryLedger *ledger, GList *entry_list); void gnc_entry_ledger_display_refresh (GncEntryLedger *ledger); -/* Get the Table */ +/** Get the Table */ Table * gnc_entry_ledger_get_table (GncEntryLedger *ledger); void gnc_entry_ledger_set_parent (GncEntryLedger *ledger, GtkWidget *parent); @@ -107,10 +113,10 @@ gboolean gnc_entry_ledger_changed (GncEntryLedger *ledger); void gnc_entry_ledger_cancel_cursor_changes (GncEntryLedger *ledger); -/* This will act just like hitting 'return' to record an entry */ +/** This will act just like hitting 'return' to record an entry */ gboolean gnc_entry_ledger_commit_entry (GncEntryLedger *ledger); -/* This will ask the user if they really want to make a change */ +/** This will ask the user if they really want to make a change */ gboolean gnc_entry_ledger_check_close (GtkWidget *parent, GncEntryLedger *ledger); void gnc_entry_ledger_reset_query (GncEntryLedger *ledger); @@ -147,5 +153,5 @@ void gnc_entry_ledger_move_current_entry_updown (GncEntryLedger *ledger, QofQuery * gnc_entry_ledger_get_query (GncEntryLedger *ledger); void gnc_entry_ledger_set_prefs_group (GncEntryLedger *ledger, const gchar *string); - +/** @} */ #endif /* GNC_ENTRY_LEDGER_H */ diff --git a/src/business/business-ledger/gncEntryLedgerControl.h b/src/business/business-ledger/gncEntryLedgerControl.h index 59eb843031..8be6a509b8 100644 --- a/src/business/business-ledger/gncEntryLedgerControl.h +++ b/src/business/business-ledger/gncEntryLedgerControl.h @@ -25,7 +25,12 @@ #define GNC_ENTRY_LEDGER_CONTROL_H #include "gncEntryLedger.h" - +/** @ingroup Register + * @addtogroup BusinessRegister + * @{ + */ +/** @file gncEntryLedgerControl.h + */ TableControl * gnc_entry_ledger_control_new (void); - +/** @} */ #endif /* GNC_ENTRY_LEDGER_CONTROL_H */ diff --git a/src/business/business-ledger/gncEntryLedgerLayout.h b/src/business/business-ledger/gncEntryLedgerLayout.h index 87cf4c41b9..918889c56a 100644 --- a/src/business/business-ledger/gncEntryLedgerLayout.h +++ b/src/business/business-ledger/gncEntryLedgerLayout.h @@ -25,7 +25,12 @@ #define GNC_ENTRY_LEDGER_LAYOUT_H #include "gncEntryLedger.h" - +/** @ingroup Register + * @addtogroup BusinessRegister + * @{ + */ +/** @file gncEntryLedgerLayout.h + */ TableLayout * gnc_entry_ledger_layout_new (GncEntryLedger *ledger); - +/** @} */ #endif /* GNC_ENTRY_LEDGER_LAYOUT_H */ diff --git a/src/business/business-ledger/gncEntryLedgerModel.h b/src/business/business-ledger/gncEntryLedgerModel.h index decc13a4d2..7fabd23761 100644 --- a/src/business/business-ledger/gncEntryLedgerModel.h +++ b/src/business/business-ledger/gncEntryLedgerModel.h @@ -25,7 +25,12 @@ #define GNC_ENTRY_LEDGER_MODEL_H #include "gncEntryLedger.h" - +/** @ingroup Register + * @addtogroup BusinessRegister + * @{ + */ +/** @file gncEntryLedgerModel.h + */ TableModel * gnc_entry_ledger_model_new (GncEntryLedgerType type); - +/** @} */ #endif /* GNC_ENTRY_LEDGER_MODEL_H */ diff --git a/src/business/business-ledger/gncEntryLedgerP.h b/src/business/business-ledger/gncEntryLedgerP.h index c04f7c376a..ad558f1e32 100644 --- a/src/business/business-ledger/gncEntryLedgerP.h +++ b/src/business/business-ledger/gncEntryLedgerP.h @@ -27,20 +27,25 @@ #include "qof.h" #include "table-allgui.h" #include "gncEntryLedger.h" - +/** @ingroup Register + * @addtogroup BusinessRegister + * @{ + */ +/** @file gncEntryLedgerP.h + */ struct GncEntryLedger_s { GncGUID blank_entry_guid; gboolean blank_entry_edited; gboolean traverse_to_new; - gboolean loading; /* To keep from recursing from events */ - gboolean full_refresh; /* Is a full refresh ok? */ - gint component_id; /* To register for events */ + gboolean loading; /** To keep from recursing from events */ + gboolean full_refresh; /** Is a full refresh ok? */ + gint component_id; /** To register for events */ GDate last_date_entered; - GncEntry * hint_entry; /* A Hint for where to display */ + GncEntry * hint_entry; /** A Hint for where to display */ GtkWidget * parent; QofBook * book; @@ -51,8 +56,8 @@ struct GncEntryLedger_s GncEntryLedgerType type; - gboolean is_cust_doc; /* is this document customer or vendor related ? */ - gboolean is_credit_note; /* is this an invoice (or a bill)? */ + gboolean is_cust_doc; /** is this document customer or vendor related ? */ + gboolean is_credit_note; /** is this an invoice (or a bill)? */ const gchar * prefs_group; }; @@ -88,5 +93,5 @@ void gnc_entry_ledger_display_fini (GncEntryLedger *ledger); void gnc_entry_ledger_compute_value (GncEntryLedger *ledger, gnc_numeric *value, gnc_numeric *tax_value); - +/** @} */ #endif /* GNC_ENTRY_LEDGERP_H */ diff --git a/src/doc/doxygen.cfg.in b/src/doc/doxygen.cfg.in index d00310ba1c..5034eac07e 100644 --- a/src/doc/doxygen.cfg.in +++ b/src/doc/doxygen.cfg.in @@ -1846,3 +1846,10 @@ GENERATE_LEGEND = YES # the various graphs. DOT_CLEANUP = YES + +# GObject code frequently hides the definition of structs in private headers and +# typedefs them in public declarations. TYPEDEF_HIDES_STRUCT prevents leaking +# the private names into the documentation. + +TYPEDEF_HIDES_STRUCT = YES + diff --git a/src/engine/Scrub.c b/src/engine/Scrub.c index 0bc97945a7..cbd2abed60 100644 --- a/src/engine/Scrub.c +++ b/src/engine/Scrub.c @@ -91,7 +91,7 @@ TransScrubOrphansFast (Transaction *trans, Account *root) gnc_commodity_get_mnemonic (trans->common_currency), NULL); orph = xaccScrubUtilityGetOrMakeAccount (root, trans->common_currency, - accname, ACCT_TYPE_BANK, FALSE); + accname, ACCT_TYPE_BANK, FALSE); g_free (accname); if (!orph) continue; @@ -233,7 +233,7 @@ xaccSplitScrub (Split *split) /* If the account doesn't have a commodity, * we should attempt to fix that first. - */ + */ acc_commodity = xaccAccountGetCommodity(account); if (!acc_commodity) { @@ -322,7 +322,7 @@ get_balance_split (Transaction *trans, Account *root, Account *account, gchar *accname; if (!account || - !gnc_commodity_equiv (commodity, xaccAccountGetCommodity(account))) + !gnc_commodity_equiv (commodity, xaccAccountGetCommodity(account))) { if (!root) { @@ -337,7 +337,7 @@ get_balance_split (Transaction *trans, Account *root, Account *account, accname = g_strconcat (_("Imbalance"), "-", gnc_commodity_get_mnemonic (commodity), NULL); account = xaccScrubUtilityGetOrMakeAccount (root, commodity, - accname, ACCT_TYPE_BANK, FALSE); + accname, ACCT_TYPE_BANK, FALSE); g_free (accname); if (!account) { @@ -391,16 +391,16 @@ get_trading_split (Transaction *trans, Account *root, account has no currency. Instead look for the Income placeholder account and use its currency. */ default_currency = xaccAccountGetCommodity(gnc_account_lookup_by_name(root, - _("Income"))); + _("Income"))); if (! default_currency) { default_currency = commodity; } trading_account = xaccScrubUtilityGetOrMakeAccount (root, - default_currency, - _("Trading"), - ACCT_TYPE_TRADING, TRUE); + default_currency, + _("Trading"), + ACCT_TYPE_TRADING, TRUE); if (!trading_account) { PERR ("Can't get trading account"); @@ -408,9 +408,9 @@ get_trading_split (Transaction *trans, Account *root, } ns_account = xaccScrubUtilityGetOrMakeAccount (trading_account, - default_currency, - gnc_commodity_get_namespace(commodity), - ACCT_TYPE_TRADING, TRUE); + default_currency, + gnc_commodity_get_namespace(commodity), + ACCT_TYPE_TRADING, TRUE); if (!ns_account) { PERR ("Can't get namespace account"); @@ -418,8 +418,8 @@ get_trading_split (Transaction *trans, Account *root, } account = xaccScrubUtilityGetOrMakeAccount (ns_account, commodity, - gnc_commodity_get_mnemonic(commodity), - ACCT_TYPE_TRADING, FALSE); + gnc_commodity_get_mnemonic(commodity), + ACCT_TYPE_TRADING, FALSE); if (!account) { PERR ("Can't get commodity account"); @@ -471,7 +471,7 @@ find_trading_split (Transaction *trans, Account *root, } ns_account = gnc_account_lookup_by_name (trading_account, - gnc_commodity_get_namespace(commodity)); + gnc_commodity_get_namespace(commodity)); if (!ns_account) { return NULL; @@ -510,8 +510,8 @@ add_balance_split (Transaction *trans, gnc_numeric imbalance, old_value = xaccSplitGetValue (balance_split); /* Note: We have to round for the commodity's fraction, NOT any - * already existing denominator (bug #104343), because either one - * of the denominators might already be reduced. */ + * already existing denominator (bug #104343), because either one + * of the denominators might already be reduced. */ new_value = gnc_numeric_sub (old_value, imbalance, gnc_commodity_get_fraction(currency), GNC_HOW_RND_ROUND_HALF_UP); @@ -528,11 +528,255 @@ add_balance_split (Transaction *trans, gnc_numeric imbalance, xaccTransCommitEdit (trans); } +/* Balance a transaction without trading accounts. */ +static void +gnc_transaction_balance_no_trading (Transaction *trans, Account *root, + Account *account) +{ + gnc_numeric imbalance = xaccTransGetImbalanceValue (trans); + + /* Make the value sum to zero */ + if (! gnc_numeric_zero_p (imbalance)) + { + PINFO ("Value unbalanced transaction"); + + add_balance_split (trans, imbalance, root, account); + } + +} +/** If there are existing trading splits, adjust the price or exchange + rate in each of them to agree with the non-trading splits for the + same commodity. If there are multiple non-trading splits for the + same commodity in the transaction this will use the exchange rate in + the last such split. This shouldn't happen, and if it does then there's + not much we can do about it anyway. + + While we're at it, compute the value imbalance ignoring existing + trading splits. */ + +static gnc_numeric +gnc_transaction_adjust_trading_splits (Transaction* trans, Account *root) +{ + GList* splits; + gnc_numeric imbalance = gnc_numeric_zero(); + for (splits = trans->splits; splits; splits = splits->next) + { + Split *split = splits->data; + Split *balance_split = NULL; + gnc_numeric value, amount; + gnc_commodity *commodity, *txn_curr = xaccTransGetCurrency (trans); + + if (! xaccTransStillHasSplit (trans, split)) continue; + + commodity = xaccAccountGetCommodity (xaccSplitGetAccount(split)); + if (!commodity) + { + PERR("Split has no commodity"); + continue; + } + + balance_split = find_trading_split (trans, root, commodity); + + if (balance_split != split) + /* this is not a trading split */ + imbalance = gnc_numeric_add(imbalance, xaccSplitGetValue (split), + GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT); + + /* Ignore splits where value or amount is zero */ + value = xaccSplitGetValue (split); + amount = xaccSplitGetAmount (split); + if (gnc_numeric_zero_p(amount) || gnc_numeric_zero_p(value)) + continue; + + if (balance_split && balance_split != split) + { + gnc_numeric convrate = gnc_numeric_div (amount, value, + GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE); + gnc_numeric old_value, new_value; + old_value = xaccSplitGetValue(balance_split); + new_value = gnc_numeric_div (xaccSplitGetAmount(balance_split), + convrate, + gnc_commodity_get_fraction(txn_curr), + GNC_HOW_RND_ROUND_HALF_UP); + if (! gnc_numeric_equal (old_value, new_value)) + { + xaccTransBeginEdit (trans); + xaccSplitSetValue (balance_split, new_value); + xaccSplitScrub (balance_split); + xaccTransCommitEdit (trans); + } + } + } + return imbalance; +} + +static gnc_numeric +gnc_transaction_get_commodity_imbalance (Transaction *trans, + gnc_commodity *commodity) +{ + /* Find the value imbalance in this commodity */ + gnc_numeric val_imbalance = gnc_numeric_zero(); + GList *splits = NULL; + for (splits = trans->splits; splits; splits = splits->next) + { + Split *split = splits->data; + gnc_commodity *split_commodity = + xaccAccountGetCommodity(xaccSplitGetAccount(split)); + if (xaccTransStillHasSplit (trans, split) && + gnc_commodity_equal (commodity, split_commodity)) + val_imbalance = gnc_numeric_add (val_imbalance, + xaccSplitGetValue (split), + GNC_DENOM_AUTO, + GNC_HOW_DENOM_EXACT); + } + return val_imbalance; +} + +static void +gnc_transaction_balance_trading (Transaction *trans, Account *root) +{ + MonetaryList *imbal_list; + MonetaryList *imbalance_commod; + Split *balance_split = NULL; + + /* If the transaction is balanced, nothing more to do */ + imbal_list = xaccTransGetImbalance (trans); + if (!imbal_list) + { + LEAVE("transaction is balanced"); + return; + } + + PINFO ("Currency unbalanced transaction"); + + for (imbalance_commod = imbal_list; imbalance_commod; + imbalance_commod = imbalance_commod->next) + { + gnc_monetary *imbal_mon = imbalance_commod->data; + gnc_commodity *commodity; + gnc_numeric old_amount, new_amount; + gnc_numeric old_value, new_value, val_imbalance; + Account *account = NULL; + const gnc_commodity *txn_curr = xaccTransGetCurrency (trans); + + commodity = gnc_monetary_commodity (*imbal_mon); + + balance_split = get_trading_split(trans, root, commodity); + if (!balance_split) + { + /* Error already logged */ + gnc_monetary_list_free(imbal_list); + LEAVE(""); + return; + } + + account = xaccSplitGetAccount(balance_split); + + if (! gnc_commodity_equal (txn_curr, commodity)) + { + gnc_transaction_get_commodity_imbalance (trans, commodity); + } + + xaccTransBeginEdit (trans); + + old_amount = xaccSplitGetAmount (balance_split); + new_amount = gnc_numeric_sub (old_amount, gnc_monetary_value(*imbal_mon), + gnc_commodity_get_fraction(commodity), + GNC_HOW_RND_ROUND_HALF_UP); + + xaccSplitSetAmount (balance_split, new_amount); + + if (gnc_commodity_equal (txn_curr, commodity)) + { + /* Imbalance commodity is the transaction currency, value in the + split must be the same as the amount */ + xaccSplitSetValue (balance_split, new_amount); + } + else + { + old_value = xaccSplitGetValue (balance_split); + new_value = gnc_numeric_sub (old_value, val_imbalance, + gnc_commodity_get_fraction(txn_curr), + GNC_HOW_RND_ROUND_HALF_UP); + + xaccSplitSetValue (balance_split, new_value); + } + + xaccSplitScrub (balance_split); + xaccTransCommitEdit (trans); + } + + gnc_monetary_list_free(imbal_list); +} + +/** Balance the transaction by adding more trading splits. This shouldn't + * ordinarily be necessary. + * @param trans the transaction to balance + * @param root the root account + */ +static void +gnc_transaction_balance_trading_more_splits (Transaction *trans, Account *root) +{ + /* Copy the split list so we don't see the splits we're adding */ + GList *splits_dup = g_list_copy(trans->splits), *splits = NULL; + const gnc_commodity *txn_curr = xaccTransGetCurrency (trans); + for (splits = splits_dup; splits; splits = splits->next) + { + Split *split = splits->data; + if (! xaccTransStillHasSplit(trans, split)) continue; + if (!gnc_numeric_zero_p(xaccSplitGetValue(split)) && + gnc_numeric_zero_p(xaccSplitGetAmount(split))) + { + gnc_commodity *commodity; + gnc_numeric old_value, new_value; + Split *balance_split; + Account *account = NULL; + + commodity = xaccAccountGetCommodity(xaccSplitGetAccount(split)); + if (!commodity) + { + PERR("Split has no commodity"); + continue; + } + balance_split = get_trading_split(trans, root, commodity); + if (!balance_split) + { + /* Error already logged */ + LEAVE(""); + return; + } + account = xaccSplitGetAccount(balance_split); + + xaccTransBeginEdit (trans); + + old_value = xaccSplitGetValue (balance_split); + new_value = gnc_numeric_sub (old_value, xaccSplitGetValue(split), + gnc_commodity_get_fraction(txn_curr), + GNC_HOW_RND_ROUND_HALF_UP); + xaccSplitSetValue (balance_split, new_value); + + /* Don't change the balance split's amount since the amount + is zero in the split we're working on */ + + xaccSplitScrub (balance_split); + xaccTransCommitEdit (trans); + } + } + + g_list_free(splits_dup); +} + +/** Correct transaction imbalances. + * @param trans The Transaction + * @param root The (hidden) root account, for the book default currency. + * @param account The account whose currency in which to balance. + */ + void xaccTransScrubImbalance (Transaction *trans, Account *root, Account *account) { - const gnc_commodity *currency; + gnc_numeric imbalance; if (!trans) return; @@ -548,233 +792,38 @@ xaccTransScrubImbalance (Transaction *trans, Account *root, return; } - currency = xaccTransGetCurrency (trans); - if (! xaccTransUseTradingAccounts (trans)) { - gnc_numeric imbalance; - - /* Make the value sum to zero */ - imbalance = xaccTransGetImbalanceValue (trans); - if (! gnc_numeric_zero_p (imbalance)) - { - PINFO ("Value unbalanced transaction"); - - add_balance_split (trans, imbalance, root, account); - } + gnc_transaction_balance_no_trading (trans, root, account); + LEAVE ("transaction balanced, no trading accounts"); + return; } - else + + imbalance = gnc_transaction_adjust_trading_splits (trans, root); + + /* Balance the value, ignoring existing trading splits */ + if (! gnc_numeric_zero_p (imbalance)) { - MonetaryList *imbal_list; - MonetaryList *imbalance_commod; - GList *splits; - gnc_numeric imbalance; - Split *balance_split = NULL; + PINFO ("Value unbalanced transaction"); - /* If there are existing trading splits, adjust the price or exchange - rate in each of them to agree with the non-trading splits for the - same commodity. If there are multiple non-trading splits for the - same commodity in the transaction this will use the exchange rate in - the last such split. This shouldn't happen, and if it does then there's - not much we can do about it anyway. - - While we're at it, compute the value imbalance ignoring existing - trading splits. */ - - imbalance = gnc_numeric_zero(); - - for (splits = trans->splits; splits; splits = splits->next) - { - Split *split = splits->data; - gnc_numeric value, amount; - gnc_commodity *commodity; - - if (! xaccTransStillHasSplit (trans, split)) continue; - - commodity = xaccAccountGetCommodity (xaccSplitGetAccount(split)); - if (!commodity) - { - PERR("Split has no commodity"); - continue; - } - - balance_split = find_trading_split (trans, root, commodity); - - if (balance_split != split) - /* this is not a trading split */ - imbalance = gnc_numeric_add(imbalance, xaccSplitGetValue (split), - GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT); - - /* Ignore splits where value or amount is zero */ - value = xaccSplitGetValue (split); - amount = xaccSplitGetAmount (split); - if (gnc_numeric_zero_p(amount) || gnc_numeric_zero_p(value)) - continue; - - if (balance_split && balance_split != split) - { - gnc_numeric convrate = gnc_numeric_div (amount, value, - GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE); - gnc_numeric old_value, new_value; - old_value = xaccSplitGetValue(balance_split); - new_value = gnc_numeric_div (xaccSplitGetAmount(balance_split), - convrate, - gnc_commodity_get_fraction(currency), - GNC_HOW_RND_ROUND_HALF_UP); - if (! gnc_numeric_equal (old_value, new_value)) - { - xaccTransBeginEdit (trans); - xaccSplitSetValue (balance_split, new_value); - xaccSplitScrub (balance_split); - xaccTransCommitEdit (trans); - } - } - } - - /* Balance the value, ignoring existing trading splits */ - if (! gnc_numeric_zero_p (imbalance)) - { - PINFO ("Value unbalanced transaction"); - - add_balance_split (trans, imbalance, root, account); - } - - /* If the transaction is balanced, nothing more to do */ - imbal_list = xaccTransGetImbalance (trans); - if (!imbal_list) - { - LEAVE("transaction is balanced"); - return; - } - - PINFO ("Currency unbalanced transaction"); - - for (imbalance_commod = imbal_list; imbalance_commod; - imbalance_commod = imbalance_commod->next) - { - gnc_monetary *imbal_mon = imbalance_commod->data; - gnc_commodity *commodity; - gnc_numeric old_amount, new_amount; - gnc_numeric old_value, new_value, val_imbalance; - GList *splits; - - commodity = gnc_monetary_commodity (*imbal_mon); - - balance_split = get_trading_split(trans, root, commodity); - if (!balance_split) - { - /* Error already logged */ - gnc_monetary_list_free(imbal_list); - LEAVE(""); - return; - } - - account = xaccSplitGetAccount(balance_split); - - if (! gnc_commodity_equal (currency, commodity)) - { - /* Find the value imbalance in this commodity */ - val_imbalance = gnc_numeric_zero(); - for (splits = trans->splits; splits; splits = splits->next) - { - Split *split = splits->data; - if (xaccTransStillHasSplit (trans, split) && - gnc_commodity_equal (commodity, - xaccAccountGetCommodity(xaccSplitGetAccount(split)))) - val_imbalance = gnc_numeric_add (val_imbalance, xaccSplitGetValue (split), - GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT); - } - } - - xaccTransBeginEdit (trans); - - old_amount = xaccSplitGetAmount (balance_split); - new_amount = gnc_numeric_sub (old_amount, gnc_monetary_value(*imbal_mon), - gnc_commodity_get_fraction(commodity), - GNC_HOW_RND_ROUND_HALF_UP); - - xaccSplitSetAmount (balance_split, new_amount); - - if (gnc_commodity_equal (currency, commodity)) - { - /* Imbalance commodity is the transaction currency, value in the - split must be the same as the amount */ - xaccSplitSetValue (balance_split, new_amount); - } - else - { - old_value = xaccSplitGetValue (balance_split); - new_value = gnc_numeric_sub (old_value, val_imbalance, - gnc_commodity_get_fraction(currency), - GNC_HOW_RND_ROUND_HALF_UP); - - xaccSplitSetValue (balance_split, new_value); - } - - xaccSplitScrub (balance_split); - xaccTransCommitEdit (trans); - } - - gnc_monetary_list_free(imbal_list); - - if (!gnc_numeric_zero_p(xaccTransGetImbalanceValue(trans))) - { - /* This is probably because there are splits with zero amount - and non-zero value. These are usually realized gain/loss - splits. Add a reversing split for each of them to balance - the value. */ - - /* Copy the split list so we don't see the splits we're adding */ - GList *splits_dup = g_list_copy(trans->splits); - for (splits = splits_dup; splits; splits = splits->next) - { - Split *split = splits->data; - if (! xaccTransStillHasSplit(trans, split)) continue; - if (!gnc_numeric_zero_p(xaccSplitGetValue(split)) && - gnc_numeric_zero_p(xaccSplitGetAmount(split))) - { - gnc_commodity *commodity; - gnc_numeric old_value, new_value; - - commodity = xaccAccountGetCommodity(xaccSplitGetAccount(split)); - if (!commodity) - { - PERR("Split has no commodity"); - continue; - } - balance_split = get_trading_split(trans, root, commodity); - if (!balance_split) - { - /* Error already logged */ - gnc_monetary_list_free(imbal_list); - LEAVE(""); - return; - } - account = xaccSplitGetAccount(balance_split); - - xaccTransBeginEdit (trans); - - old_value = xaccSplitGetValue (balance_split); - new_value = gnc_numeric_sub (old_value, xaccSplitGetValue(split), - gnc_commodity_get_fraction(currency), - GNC_HOW_RND_ROUND_HALF_UP); - xaccSplitSetValue (balance_split, new_value); - - /* Don't change the balance split's amount since the amount - is zero in the split we're working on */ - - xaccSplitScrub (balance_split); - xaccTransCommitEdit (trans); - } - } - - g_list_free(splits_dup); - - if (!gnc_numeric_zero_p(xaccTransGetImbalanceValue(trans))) - PERR("Balancing currencies unbalanced value"); - } + add_balance_split (trans, imbalance, root, account); } - LEAVE ("()"); + + gnc_transaction_balance_trading (trans, root); + if (gnc_numeric_zero_p(xaccTransGetImbalanceValue(trans))) + { + LEAVE ("()"); + return; + } + /* If the transaction is still not balanced, it's probably because there + are splits with zero amount and non-zero value. These are usually + realized gain/loss splits. Add a reversing split for each of them to + balance the value. */ + + gnc_transaction_balance_trading_more_splits (trans, root); + if (!gnc_numeric_zero_p(xaccTransGetImbalanceValue(trans))) + PERR("Balancing currencies unbalanced value"); + } /* ================================================================ */ @@ -880,7 +929,7 @@ xaccTransFindOldCommonCurrency (Transaction *trans, QofBook *book) if (retval && !gnc_commodity_is_currency(retval)) retval = NULL; - + return retval; } @@ -900,7 +949,7 @@ commodity_equal (gconstpointer a, gconstpointer b) CommodityCount *cc = (CommodityCount*)a; gnc_commodity *com = (gnc_commodity*)b; if ( cc == NULL || cc->commodity == NULL || - !GNC_IS_COMMODITY( cc->commodity ) ) return -1; + !GNC_IS_COMMODITY( cc->commodity ) ) return -1; if ( com == NULL || !GNC_IS_COMMODITY( com ) ) return 1; if ( gnc_commodity_equal(cc->commodity, com) ) return 0; @@ -912,15 +961,15 @@ commodity_compare( gconstpointer a, gconstpointer b) { CommodityCount *ca = (CommodityCount*)a, *cb = (CommodityCount*)b; if (ca == NULL || ca->commodity == NULL || - !GNC_IS_COMMODITY( ca->commodity ) ) + !GNC_IS_COMMODITY( ca->commodity ) ) { if (cb == NULL || cb->commodity == NULL || - !GNC_IS_COMMODITY( cb->commodity ) ) + !GNC_IS_COMMODITY( cb->commodity ) ) return 0; return -1; } if (cb == NULL || cb->commodity == NULL || - !GNC_IS_COMMODITY( cb->commodity ) ) + !GNC_IS_COMMODITY( cb->commodity ) ) return 1; if (ca->count == cb->count) return 0; @@ -949,14 +998,14 @@ xaccTransFindCommonCurrency (Transaction *trans, QofBook *book) g_return_val_if_fail (book, NULL); /* Find the most commonly used currency among the splits. If a given split - is in a non-currency commodity, then look for an ancestor account in a + is in a non-currency commodity, then look for an ancestor account in a currency, but prefer currencies used directly in splits. Ignore trading account splits in this whole process, they don't add any value to this algorithm. */ for (node = trans->splits; node; node = node->next) { Split *s = node->data; unsigned int curr_weight; - + if (s == NULL || s->acc == NULL) continue; if (xaccAccountGetType(s->acc) == ACCT_TYPE_TRADING) continue; com_scratch = xaccAccountGetCommodity(s->acc); @@ -1102,14 +1151,14 @@ xaccTransScrubCurrency (Transaction *trans) xaccTransCommitEdit (trans); } /*else - { + { PINFO ("Ok: Split '%s' Amount %s %s, value %s %s", xaccSplitGetMemo (sp), gnc_num_dbg_to_string (amount), gnc_commodity_get_mnemonic (currency), gnc_num_dbg_to_string (value), gnc_commodity_get_mnemonic (acc_currency)); - }*/ + }*/ } } diff --git a/src/gnome-utils/dialog-options.c b/src/gnome-utils/dialog-options.c index e590b902d3..62b1d414eb 100644 --- a/src/gnome-utils/dialog-options.c +++ b/src/gnome-utils/dialog-options.c @@ -1022,6 +1022,7 @@ gnc_option_account_select_all_cb(GtkWidget *widget, gpointer data) GtkTreeSelection *selection; tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option)); + gtk_tree_view_expand_all(GTK_TREE_VIEW(tree_view)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); gtk_tree_selection_select_all(selection); gnc_option_changed_widget_cb(widget, option); @@ -1045,14 +1046,15 @@ gnc_option_account_select_children_cb(GtkWidget *widget, gpointer data) { GNCOption *option = data; GncTreeViewAccount *tree_view; - Account *account; + GList *acct_list = NULL, *acct_iter = NULL; tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option)); - account = gnc_tree_view_account_get_cursor_account(tree_view); - if (!account) - return; + acct_list = gnc_tree_view_account_get_selected_accounts (tree_view); - gnc_tree_view_account_select_subaccounts(tree_view, account); + for (acct_iter = acct_list; acct_iter; acct_iter = acct_iter->next) + gnc_tree_view_account_select_subaccounts (tree_view, acct_iter->data); + + g_list_free (acct_list); } static GtkWidget * diff --git a/src/gnome-utils/gnc-tree-control-split-reg.h b/src/gnome-utils/gnc-tree-control-split-reg.h index 23a2470df3..76d92f50ea 100644 --- a/src/gnome-utils/gnc-tree-control-split-reg.h +++ b/src/gnome-utils/gnc-tree-control-split-reg.h @@ -31,6 +31,12 @@ #include "gnc-tree-view-split-reg.h" G_BEGIN_DECLS +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-tree-control-split-reg.h + */ /*****************************************************************************/ @@ -120,7 +126,7 @@ void gnc_tree_control_split_reg_paste_trans (GncTreeViewSplitReg *view); void gnc_tree_control_auto_complete (GncTreeViewSplitReg *view, Transaction *trans, const gchar *new_text); /*****************************************************************************/ - +/** @} */ G_END_DECLS #endif /* __GNC_TREE_CONTROL_SPLIT_REG_H */ diff --git a/src/gnome-utils/gnc-tree-model-split-reg.h b/src/gnome-utils/gnc-tree-model-split-reg.h index 0461e4d516..6259ca39d4 100644 --- a/src/gnome-utils/gnc-tree-model-split-reg.h +++ b/src/gnome-utils/gnc-tree-model-split-reg.h @@ -34,7 +34,12 @@ G_BEGIN_DECLS - +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-tree-model-split-reg.h + */ /* type macros */ #define GNC_TYPE_TREE_MODEL_SPLIT_REG (gnc_tree_model_split_reg_get_type ()) #define GNC_TREE_MODEL_SPLIT_REG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_TREE_MODEL_SPLIT_REG, GncTreeModelSplitReg)) @@ -128,7 +133,7 @@ typedef enum typedef struct GncTreeModelSplitRegPrivate GncTreeModelSplitRegPrivate; /** The instance data structure for an account tree model. */ -typedef struct +typedef struct { GncTreeModel gnc_tree_model; /**< The parent object data. */ GncTreeModelSplitRegPrivate *priv; @@ -145,8 +150,8 @@ typedef struct GtkSortType sort_direction; /**< This is the direction of sort */ gboolean use_accounting_labels; /**< whether to use accounting Labels */ - gboolean separator_changed; /**< whether the separator has changed */ - gboolean alt_colors_by_txn; /**< whether to use alternative colors by transaction */ + gboolean separator_changed; /**< whether the separator has changed */ + gboolean alt_colors_by_txn; /**< whether to use alternative colors by transaction */ gboolean use_theme_colors; /**< whether to use theme colors */ gboolean read_only; /**< register is read only */ @@ -325,7 +330,7 @@ Split * gnc_tree_model_split_reg_trans_get_split_equal_to_ancestor (const Transa gint gnc_tree_model_split_reg_sort_iter_compare_func (GtkTreeModel *tm, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data); /*****************************************************************************/ - +/** @} */ G_END_DECLS #endif /* __GNC_TREE_MODEL_SPLIT_REG_H */ diff --git a/src/gnome-utils/gnc-tree-util-split-reg.h b/src/gnome-utils/gnc-tree-util-split-reg.h index a2b7def51f..d2179588ca 100644 --- a/src/gnome-utils/gnc-tree-util-split-reg.h +++ b/src/gnome-utils/gnc-tree-util-split-reg.h @@ -31,7 +31,12 @@ #include "gnc-tree-view-split-reg.h" G_BEGIN_DECLS - +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-tree-util-split-reg.h + */ /*****************************************************************************/ @@ -83,7 +88,7 @@ gnc_numeric gnc_tree_util_get_rate_for (GncTreeViewSplitReg *view, Transaction * Split *split, gboolean is_blank); /*****************************************************************************/ - +/** @} */ G_END_DECLS #endif /* __GNC_TREE_UTIL_SPLIT_REG_H */ diff --git a/src/gnome-utils/gnc-tree-view-split-reg.h b/src/gnome-utils/gnc-tree-view-split-reg.h index 16fe56d89d..071a266f2a 100644 --- a/src/gnome-utils/gnc-tree-view-split-reg.h +++ b/src/gnome-utils/gnc-tree-view-split-reg.h @@ -35,7 +35,12 @@ #include "gnc-ui-util.h" G_BEGIN_DECLS - +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-tree-view-split-reg.h + */ #define GNC_TYPE_TREE_VIEW_SPLIT_REG (gnc_tree_view_split_reg_get_type ()) #define GNC_TREE_VIEW_SPLIT_REG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_TREE_VIEW_SPLIT_REG, GncTreeViewSplitReg)) #define GNC_TREE_VIEW_SPLIT_REG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_TREE_VIEW_SPLIT_REG, GncTreeViewSplitRegClass)) @@ -181,7 +186,7 @@ void gnc_tree_view_split_reg_cancel_edit (GncTreeViewSplitReg *view, gboolean re void gnc_tree_view_split_reg_finish_edit (GncTreeViewSplitReg *view); - +/** @} */ G_END_DECLS #endif /* __GNC_TREE_VIEW_SPLIT_REG_H */ diff --git a/src/gnome-utils/test/test-gnc-recurrence.c b/src/gnome-utils/test/test-gnc-recurrence.c index 1541914eaf..e451653905 100644 --- a/src/gnome-utils/test/test-gnc-recurrence.c +++ b/src/gnome-utils/test/test-gnc-recurrence.c @@ -1,6 +1,5 @@ -/* Copyright (C) 2005, Chris Shoemaker - * This file is free software. See COPYING for details. */ -/********************************************************************\ + /********************************************************************\ + * Copyright (C) 2005, Chris Shoemaker * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * * published by the Free Software Foundation; either version 2 of * diff --git a/src/gnome/gnc-plugin-page-register.c b/src/gnome/gnc-plugin-page-register.c index 15b3a168cc..b5973a1a22 100644 --- a/src/gnome/gnc-plugin-page-register.c +++ b/src/gnome/gnc-plugin-page-register.c @@ -1965,7 +1965,7 @@ gnc_plugin_page_register_sort_order_save_cb (GtkToggleButton *button, void gnc_plugin_page_register_sort_order_reverse_cb (GtkToggleButton *button, GncPluginPageRegister *page) - + { GncPluginPageRegisterPrivate *priv; @@ -2738,7 +2738,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction *action, gnc_ui_print_check_dialog_create(plugin_page, splits); g_list_free(splits); } - } + } } } else if (ledger_type == LD_GL && reg->type == SEARCH_LEDGER) @@ -3089,9 +3089,9 @@ gnc_plugin_page_register_cmd_view_sort_by (GtkAction *action, button = GTK_WIDGET(gtk_builder_get_object (builder, "sort_save")); if (priv->sd.save_order == TRUE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - + /* Set the button for the current reverse_order order */ - button = GTK_WIDGET(gtk_builder_get_object (builder, "sort_reverse")); + button = GTK_WIDGET(gtk_builder_get_object (builder, "sort_reverse")); if(priv->sd.reverse_order == TRUE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); @@ -3573,6 +3573,8 @@ gnc_plugin_page_register_cmd_expand_transaction (GtkToggleAction *action, LEAVE(" "); } +/** Callback for "Edit Exchange Rate" menu item. + */ static void gnc_plugin_page_register_cmd_exchange_rate (GtkAction *action, GncPluginPageRegister *plugin_page) diff --git a/src/gnome/gnc-plugin-page-register2.h b/src/gnome/gnc-plugin-page-register2.h index 570a3f49d8..eaf8add5e8 100644 --- a/src/gnome/gnc-plugin-page-register2.h +++ b/src/gnome/gnc-plugin-page-register2.h @@ -22,16 +22,6 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * **********************************************************************/ -/** @addtogroup ContentPlugins - @{ */ -/** @addtogroup Register2Plugin Register2 Page - @{ */ -/** @file gnc-plugin-page-register.h - @brief Functions providing a register page for the GnuCash UI - @author Copyright (C) 2003 Jan Arne Petersen - @author Copyright (C) 2003 David Hampton -*/ - #ifndef __GNC_PLUGIN_PAGE_REGISTER2_H #define __GNC_PLUGIN_PAGE_REGISTER2_H @@ -43,7 +33,12 @@ #include "gnc-split-reg2.h" G_BEGIN_DECLS - +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-plugin-page-register2.h + */ /* type macros */ #define GNC_TYPE_PLUGIN_PAGE_REGISTER2 (gnc_plugin_page_register2_get_type ()) #define GNC_PLUGIN_PAGE_REGISTER2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_PLUGIN_PAGE_REGISTER2, GncPluginPageRegister2)) @@ -153,7 +148,5 @@ gnc_plugin_page_register2_get_account (GncPluginPageRegister2 *page); G_END_DECLS /** @} */ -/** @} */ #endif /* __GNC_PLUGIN_PAGE_REGISTER2_H */ - diff --git a/src/gnome/gnc-plugin-register2.h b/src/gnome/gnc-plugin-register2.h index 319a227cc5..7ca9ac057f 100644 --- a/src/gnome/gnc-plugin-register2.h +++ b/src/gnome/gnc-plugin-register2.h @@ -28,7 +28,12 @@ #include "gnc-plugin.h" G_BEGIN_DECLS - +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-plugin-register2.h + */ /* type macros */ #define GNC_TYPE_PLUGIN_REGISTER2 (gnc_plugin_register2_get_type ()) #define GNC_PLUGIN_REGISTER2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_PLUGIN_REGISTER2, GncPluginRegister2)) @@ -56,5 +61,6 @@ GType gnc_plugin_register2_get_type (void); GncPlugin *gnc_plugin_register2_new (void); G_END_DECLS +/** @} */ #endif /* __GNC_PLUGIN_REGISTER2_H */ diff --git a/src/gnome/gnc-split-reg.c b/src/gnome/gnc-split-reg.c index 188a24d0bc..1444a9acf7 100644 --- a/src/gnome/gnc-split-reg.c +++ b/src/gnome/gnc-split-reg.c @@ -164,8 +164,6 @@ void gnc_split_reg_size_allocate( GtkWidget *widget, gpointer user_data ); -void gnc_split_reg_handle_exchange_cb (GtkWidget *w, gpointer data); - static void gnc_split_reg_class_init( GNCSplitRegClass *klass ); static void gnc_split_reg_init( GNCSplitReg *gsr ); static void gnc_split_reg_init2( GNCSplitReg *gsr ); @@ -1893,16 +1891,6 @@ gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev) gnc_ledger_display_refresh( gsr->ledger ); } -void -gnc_split_reg_handle_exchange_cb (GtkWidget *w, gpointer data) -{ - GNCSplitReg *gsr = data; - SplitRegister *reg = gnc_ledger_display_get_split_register (gsr->ledger); - - /* XXX Ignore the return value -- we don't care if this succeeds */ - (void)gnc_split_register_handle_exchange (reg, TRUE); -} - static void gnc_split_reg_record (GNCSplitReg *gsr) { diff --git a/src/gnome/gnc-split-reg2.h b/src/gnome/gnc-split-reg2.h index d9f527032a..5e00a2dcdf 100644 --- a/src/gnome/gnc-split-reg2.h +++ b/src/gnome/gnc-split-reg2.h @@ -33,7 +33,12 @@ #include "gnc-ledger-display2.h" #include "gnc-split-reg.h" #include "gnc-tree-view-split-reg.h" - +/** @ingroup Register + * @addtogroup Register2 + * @{ + */ +/** @file gnc-split-reg2.h + */ #define GNC_SPLIT_REG2(obj) G_TYPE_CHECK_INSTANCE_CAST( obj, gnc_split_reg2_get_type(), GNCSplitReg2 ) #define GNC_SPLIT_REG2_CLASS(klass) G_TYPE_CHECK_CLASS_CAST( klass, gnc_split_reg2_get_type(), GNCSplitReg2Class ) #define IS_GNC_SPLIT_REG2(obj) G_TYPE_CHECK_INSTANCE_TYPE( obj, gnc_split_reg2_get_type() ) @@ -154,5 +159,5 @@ void gnc_split_reg2_balancing_entry (GNCSplitReg2 *gsr, Account *account, void gnc_split_reg2_set_moved_cb (GNCSplitReg2 *gsr, GFunc cb, gpointer cb_data); - +/** @} */ #endif /* GNC_SPLIT_REG2_H */ diff --git a/src/import-export/csv-imp/gnc-csv-gnumeric-popup.c b/src/import-export/csv-imp/gnc-csv-gnumeric-popup.c index 5348344dc1..4d5b770db4 100644 --- a/src/import-export/csv-imp/gnc-csv-gnumeric-popup.c +++ b/src/import-export/csv-imp/gnc-csv-gnumeric-popup.c @@ -1,8 +1,6 @@ -/* The following is code copied from Gnumeric 1.7.8 licensed under the - * GNU General Public License version 2 and/or version 3. It is from the file - * gnumeric/src/gui-util.c, and it has been modified slightly to work - * within GnuCash. */ /********************************************************************\ + * The following is code copied from Gnumeric 1.7.8 src/gui-util.c, * + * and it has been modified slightly to work within GnuCash. * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * * published by the Free Software Foundation; either version 2 of * diff --git a/src/import-export/qif-imp/qif-parse.scm b/src/import-export/qif-imp/qif-parse.scm index c28f896d19..3bc7eaeced 100644 --- a/src/import-export/qif-imp/qif-parse.scm +++ b/src/import-export/qif-imp/qif-parse.scm @@ -419,8 +419,8 @@ (let ((retval '())) (if (or (not (string? date-string)) (not (> (string-length date-string) 0))) - (set! retval possible-formats)) - (let ((match (regexp-exec qif-date-compiled-rexp date-string))) + (set! retval possible-formats) + (let ((match (regexp-exec qif-date-compiled-rexp date-string))) (if match (if (match:substring match 1) (set! retval (parse-check-date-format match possible-formats)) @@ -442,7 +442,8 @@ (memq 'm-d-y possible-formats)) (set! res2 (parse-check-date-format date-mdy possible-formats))) - (set! retval (append res1 res2)))))) + (set! retval (append res1 res2))))))) + retval)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/src/register/ledger-core/gnc-ledger-display.h b/src/register/ledger-core/gnc-ledger-display.h index 810df6998c..743df081de 100644 --- a/src/register/ledger-core/gnc-ledger-display.h +++ b/src/register/ledger-core/gnc-ledger-display.h @@ -33,10 +33,15 @@ #include "SchedXaction.h" #include "Transaction.h" +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnc-ledger-display.h + * @brief Public declarations for GncLedgerDisplay class. + */ -/** Definitions *****************************************************/ - -/* The GNCLedgerDisplay struct describes a single register/ledger +/** @brief The GNCLedgerDisplay struct describes a single register/ledger * instance. It has a SplitRegister specially configured for * displaying the results of a Query. It also stores the Query. */ typedef struct gnc_ledger_display GNCLedgerDisplay; @@ -54,19 +59,17 @@ typedef enum } GNCLedgerDisplayType; -/** Prototypes ******************************************************/ - -/* returns the 'lead' account of a ledger display, or NULL if none. */ +/** returns the 'lead' account of a ledger display, or NULL if none. */ Account * gnc_ledger_display_leader (GNCLedgerDisplay *ld); GNCLedgerDisplayType gnc_ledger_display_type (GNCLedgerDisplay *ld); -/* get and set the user data associated with the ledger */ +/** get and set the user data associated with the ledger */ void gnc_ledger_display_set_user_data (GNCLedgerDisplay *ld, gpointer user_data); gpointer gnc_ledger_display_get_user_data (GNCLedgerDisplay *ld); -/* set the handlers used by the ledger display */ +/** set the handlers used by the ledger display */ void gnc_ledger_display_set_handlers (GNCLedgerDisplay *ld, GNCLedgerDisplayDestroy destroy, GNCLedgerDisplayGetParent get_parent); @@ -74,17 +77,17 @@ void gnc_ledger_display_set_handlers (GNCLedgerDisplay *ld, /** Returns the parent of a given ledger display */ GtkWidget *gnc_ledger_display_get_parent( GNCLedgerDisplay *ld ); -/* return the split register associated with a ledger display */ +/** return the split register associated with a ledger display */ SplitRegister * gnc_ledger_display_get_split_register (GNCLedgerDisplay *ld); -/* opens up a register window to display a single account */ +/** opens up a register window to display a single account */ GNCLedgerDisplay * gnc_ledger_display_simple (Account *account); -/* opens up a register window to display the parent account and all of +/** opens up a register window to display the parent account and all of * its children. */ GNCLedgerDisplay * gnc_ledger_display_subaccounts (Account *account); -/* opens up a general journal window */ +/** opens up a general ledger window */ GNCLedgerDisplay * gnc_ledger_display_gl (void); /** @@ -96,31 +99,31 @@ GNCLedgerDisplay * gnc_ledger_display_gl (void); **/ GNCLedgerDisplay * gnc_ledger_display_template_gl (char *id); -/* display a general journal for an arbitrary query */ +/** display a general ledger for an arbitrary query */ GNCLedgerDisplay * gnc_ledger_display_query (Query *query, SplitRegisterType type, SplitRegisterStyle style); -/* Set the query used for a register. */ +/** Set the query used for a register. */ void gnc_ledger_display_set_query (GNCLedgerDisplay *ledger_display, Query *q); -/* return the query associated with a ledger */ +/** return the query associated with a ledger */ Query * gnc_ledger_display_get_query (GNCLedgerDisplay *ld); -/* If the given ledger display still exists, return it. Otherwise, +/** If the given ledger display still exists, return it. Otherwise, * return NULL */ GNCLedgerDisplay * gnc_ledger_display_find_by_query (Query *q); -/* redisplay/redraw only the indicated window. Both routines do same +/** redisplay/redraw only the indicated window. Both routines do same * thing, they differ only by the argument they take. */ void gnc_ledger_display_refresh (GNCLedgerDisplay * ledger_display); void gnc_ledger_display_refresh_by_split_register (SplitRegister *reg); -/* close the window */ +/** close the window */ void gnc_ledger_display_close (GNCLedgerDisplay * ledger_display); -/* Returns a boolean of whether this display should be single or double lined +/** Returns a boolean of whether this display should be single or double lined * mode by default */ gboolean gnc_ledger_display_default_double_line (GNCLedgerDisplay *gld); diff --git a/src/register/ledger-core/gnc-ledger-display2.h b/src/register/ledger-core/gnc-ledger-display2.h index e0a810cb30..27d60da2ff 100644 --- a/src/register/ledger-core/gnc-ledger-display2.h +++ b/src/register/ledger-core/gnc-ledger-display2.h @@ -31,16 +31,24 @@ #include "Account.h" #include "Query.h" -#include "split-register.h" +#include "split-register.h" #include "SchedXaction.h" #include "Transaction.h" #include "gnc-tree-model-split-reg.h" #include "gnc-tree-view-split-reg.h" -/** Definitions *****************************************************/ +/** @ingroup Register + * @addtogroup Register2 + * @brief Register2 is a reimplementation of the original Register with new + * classes based on GtkListView. + * @{ + */ +/** @file gnc-ledger-display2.h + * @brief Public declarations for GncLedgerDisplay2 class. + */ -/* The GNCLedgerDisplay2 struct describes a single register/ledger +/**@brief Defines a single register/ledger * instance. It has a SplitRegister specially configured for * displaying the results of a Query. It also stores the Query. */ typedef struct gnc_ledger_display2 GNCLedgerDisplay2; @@ -59,24 +67,22 @@ typedef enum } GNCLedgerDisplay2Type; -/** Prototypes ******************************************************/ - -/* returns the 'lead' account of a ledger display, or NULL if none. */ +/** returns the 'lead' account of a ledger display, or NULL if none. */ Account * gnc_ledger_display2_leader (GNCLedgerDisplay2 *ld); GNCLedgerDisplay2Type gnc_ledger_display2_type (GNCLedgerDisplay2 *ld); -/* get and set the user data associated with the ledger */ +/** get and set the user data associated with the ledger */ void gnc_ledger_display2_set_user_data (GNCLedgerDisplay2 *ld, gpointer user_data); gpointer gnc_ledger_display2_get_user_data (GNCLedgerDisplay2 *ld); -/* set the handlers used by the ledger display */ +/** set the handlers used by the ledger display */ void gnc_ledger_display2_set_handlers (GNCLedgerDisplay2 *ld, GNCLedgerDisplay2Destroy destroy, GNCLedgerDisplay2GetParent get_parent); -/* Set and Get the tree view used by the ledger display */ +/** Set and Get the tree view used by the ledger display */ void gnc_ledger_display2_set_split_view_register (GNCLedgerDisplay2 *ld, GncTreeViewSplitReg *view); GncTreeViewSplitReg * gnc_ledger_display2_get_split_view_register (GNCLedgerDisplay2 *ld); @@ -85,17 +91,17 @@ void gnc_ledger_display2_set_split_view_refresh (GNCLedgerDisplay2 *ld, gboolean /** Returns the parent of a given ledger display */ GtkWidget *gnc_ledger_display2_get_parent( GNCLedgerDisplay2 *ld ); -/* return the split register associated with a ledger display */ +/** return the split register associated with a ledger display */ GncTreeModelSplitReg * gnc_ledger_display2_get_split_model_register (GNCLedgerDisplay2 *ld); -/* opens up a register window to display a single account */ +/** opens up a register window to display a single account */ GNCLedgerDisplay2 * gnc_ledger_display2_simple (Account *account); -/* opens up a register window to display the parent account and all of +/** opens up a register window to display the parent account and all of * its children. */ GNCLedgerDisplay2 * gnc_ledger_display2_subaccounts (Account *account); -/* opens up a general journal window */ +/** opens up a general ledger window */ GNCLedgerDisplay2 * gnc_ledger_display2_gl (void); /** @@ -107,37 +113,37 @@ GNCLedgerDisplay2 * gnc_ledger_display2_gl (void); **/ GNCLedgerDisplay2 * gnc_ledger_display2_template_gl (char *id); -/* display a general journal for an arbitrary query */ +/** display a general ledger for an arbitrary query */ GNCLedgerDisplay2 * gnc_ledger_display2_query (Query *query, SplitRegisterType2 type, SplitRegisterStyle2 style); -/* Set the query used for a register. */ +/** Set the query used for a register. */ void gnc_ledger_display2_set_query (GNCLedgerDisplay2 *ledger_display, Query *q); -/* return the query associated with a ledger */ +/** return the query associated with a ledger */ Query * gnc_ledger_display2_get_query (GNCLedgerDisplay2 *ld); -/* If the given ledger display still exists, return it. Otherwise, +/** If the given ledger display still exists, return it. Otherwise, * return NULL */ GNCLedgerDisplay2 * gnc_ledger_display2_find_by_query (Query *q); -/* redisplay/redraw only the indicated window. Both routines do same +/** redisplay/redraw only the indicated window. Both routines do same * thing, they differ only by the argument they take. */ void gnc_ledger_display2_refresh (GNCLedgerDisplay2 * ledger_display); void gnc_ledger_display2_refresh_by_split_register (GncTreeModelSplitReg *model); -/* This is used to load the register for the schedule */ +/** This is used to load the register for the schedule */ void gnc_ledger_display2_refresh_sched (GNCLedgerDisplay2 *ld, GList *splits); -/* Refilter the register */ +/** Refilter the register */ void gnc_ledger_display2_refilter (GNCLedgerDisplay2 *ld); -/* close the window */ +/** close the window */ void gnc_ledger_display2_close (GNCLedgerDisplay2 * ledger_display); -/* Returns a boolean of whether this display should be single or double lined +/** Returns a boolean of whether this display should be single or double lined * mode by default */ gboolean gnc_ledger_display2_default_double_line (GNCLedgerDisplay2 *gld); diff --git a/src/register/ledger-core/split-register-control.c b/src/register/ledger-core/split-register-control.c index 23b22fb1b6..793c956a84 100644 --- a/src/register/ledger-core/split-register-control.c +++ b/src/register/ledger-core/split-register-control.c @@ -250,7 +250,7 @@ gnc_split_register_check_debcred (SplitRegister *reg, } } } - + return TRUE; } @@ -302,7 +302,7 @@ gnc_split_register_check_account (SplitRegister *reg, cell->cell.value); if (!new_acct) return FALSE; - + split = gnc_split_register_get_current_split(reg); gnc_split_register_set_cell_fractions (reg, split); @@ -1151,7 +1151,7 @@ gnc_split_register_check_cell (SplitRegister *reg, const char *cell_name) LEAVE("account check failed"); return FALSE; } - + /* See if we are leaving a debit or credit cell */ if (!gnc_split_register_check_debcred (reg, cell_name)) { @@ -1287,10 +1287,13 @@ gnc_split_register_xfer_dialog(SplitRegister *reg, Transaction *txn, return xfer; } -/* This function checks to see if we need to determine an exchange rate. - * If we need to determine an exchange rate, then pop up the dialog. +/** If needed display the transfer dialog to get a price/exchange rate and + * adjust the price cell accordingly. * If the dialog does not complete successfully, then return TRUE. * Return FALSE in all other cases (meaning "move on") + * @param reg the register to operate on + * @param force_dialog pop a dialog even if we don't think we need it. + * @return whether more handling is required. */ gboolean gnc_split_register_handle_exchange (SplitRegister *reg, gboolean force_dialog) diff --git a/src/register/ledger-core/split-register-control.h b/src/register/ledger-core/split-register-control.h index d1bd6ef69d..fd23b27e83 100644 --- a/src/register/ledger-core/split-register-control.h +++ b/src/register/ledger-core/split-register-control.h @@ -24,7 +24,13 @@ #define SPLIT_REGISTER_CONTROL_H #include "table-control.h" +/** @addtogroup SplitRegister + * @{ + */ +/** @file split-register-control.h + * @brief TableControl specialized for the SplitRegister.*/ +/** Create a new TableControl specialized for the SplitRegister. */ TableControl * gnc_split_register_control_new (void); - +/** @} */ #endif diff --git a/src/register/ledger-core/split-register-model-save.h b/src/register/ledger-core/split-register-model-save.h index df2f5ae96f..e0dd41134f 100644 --- a/src/register/ledger-core/split-register-model-save.h +++ b/src/register/ledger-core/split-register-model-save.h @@ -26,7 +26,13 @@ #include "Transaction.h" #include "table-model.h" - +/** @addtogroup SplitRegister + * @{ + */ +/** @file split-register-model-save.h + * @brief Save handlers for the SplitRegister Model and Template SplitRegister + * model. + */ void gnc_split_register_model_add_save_handlers (TableModel *model); void gnc_template_register_model_add_save_handlers (TableModel *model); @@ -38,4 +44,5 @@ SRSaveData * gnc_split_register_save_data_new (Transaction *trans, void gnc_split_register_save_data_destroy (SRSaveData *sd); +/** @} */ #endif diff --git a/src/register/ledger-core/split-register-model.h b/src/register/ledger-core/split-register-model.h index 1f264c408c..1dee393368 100644 --- a/src/register/ledger-core/split-register-model.h +++ b/src/register/ledger-core/split-register-model.h @@ -24,8 +24,13 @@ #define SPLIT_REGISTER_MODEL_H #include "table-model.h" - +/** @addtogroup SplitRegister + * @{ + */ +/** @file split-register-model.h + * @brief TableModels specialized for SplitRegister and template SplitRegister. + */ TableModel * gnc_split_register_model_new (void); TableModel * gnc_template_register_model_new (void); - +/* @} */ #endif diff --git a/src/register/ledger-core/split-register-p.h b/src/register/ledger-core/split-register-p.h index 0f107ff28e..9822e003d3 100644 --- a/src/register/ledger-core/split-register-p.h +++ b/src/register/ledger-core/split-register-p.h @@ -25,6 +25,12 @@ #include "split-register.h" +/** @addtogroup SplitRegister + * @{ + */ +/** @file split-register-p.h + * @brief private declarations for SplitRegister + */ #define SPLIT_TRANS_STR _("-- Split Transaction --") #define STOCK_SPLIT_STR _("-- Stock Split --") @@ -40,92 +46,92 @@ typedef enum { struct sr_info { - /* The blank split at the bottom of the register */ + /** The blank split at the bottom of the register */ GncGUID blank_split_guid; - /* The currently open transaction, if any */ + /** The currently open transaction, if any */ GncGUID pending_trans_guid; - /* A transaction used to remember where to put the cursor */ + /** A transaction used to remember where to put the cursor */ Transaction *cursor_hint_trans; - /* A split used to remember where to put the cursor */ + /** A split used to remember where to put the cursor */ Split *cursor_hint_split; - /* A split used to remember where to put the cursor */ + /** A split used to remember where to put the cursor */ Split *cursor_hint_trans_split; - /* Used to remember where to put the cursor */ + /** Used to remember where to put the cursor */ CursorClass cursor_hint_cursor_class; - /* If the hints were set by the traverse callback */ + /** If the hints were set by the traverse callback */ gboolean hint_set_by_traverse; - /* If traverse is to the newly created split */ + /** If traverse is to the newly created split */ gboolean traverse_to_new; - /* A flag indicating if the last traversal was 'exact'. + /** A flag indicating if the last traversal was 'exact'. * See table-allgui.[ch] for details. */ gboolean exact_traversal; - /* Indicates that the current transaction is expanded + /** Indicates that the current transaction is expanded * in ledger mode. Meaningless in other modes. */ gboolean trans_expanded; - /* set to TRUE after register is loaded */ + /** set to TRUE after register is loaded */ gboolean reg_loaded; - /* flag indicating whether full refresh is ok */ + /** flag indicating whether full refresh is ok */ gboolean full_refresh; - /* The default account where new splits are added */ + /** The default account where new splits are added */ GncGUID default_account; - /* The last date recorded in the blank split */ + /** The last date recorded in the blank split */ time64 last_date_entered; - /* true if the current blank split has been edited and commited */ + /** true if the current blank split has been edited and commited */ gboolean blank_split_edited; - /* true if the demarcation between 'past' and 'future' transactions + /** true if the demarcation between 'past' and 'future' transactions * should be visible */ gboolean show_present_divider; - /* true if we are loading the register for the first time */ + /** true if we are loading the register for the first time */ gboolean first_pass; - /* true if the user has already confirmed changes of a reconciled + /** true if the user has already confirmed changes of a reconciled * split */ gboolean change_confirmed; - /* RATE_RESET_NOT_REQD => No exchange rate dialog needed for current split + /** RATE_RESET_NOT_REQD => No exchange rate dialog needed for current split * RATE_RESET_REQD => Need new exchange rate for current split * RATE_RESET_DONE => Already got a new exchange rate for current split */ RateReset_t rate_reset; - - /* true if the transaction being edited was auto-filled */ + + /** true if the transaction being edited was auto-filled */ gboolean auto_complete; - /* account on the current split when the exchange rate was last set */ + /** account on the current split when the exchange rate was last set */ Account *rate_account; - /* User data for users of SplitRegisters */ + /** User data for users of SplitRegisters */ gpointer user_data; - /* hook to get parent widget */ + /** hook to get parent widget */ SRGetParentCallback get_parent; - /* The template account which template transaction should belong to */ + /** The template account which template transaction should belong to */ GncGUID template_account; - /* configured strings for debit/credit headers */ + /** configured strings for debit/credit headers */ char *debit_str; char *credit_str; char *tdebit_str; char *tcredit_str; - /* true if the account separator has changed */ + /** true if the account separator has changed */ gboolean separator_changed; }; @@ -155,15 +161,16 @@ gboolean gnc_split_register_find_split (SplitRegister *reg, void gnc_split_register_show_trans (SplitRegister *reg, VirtualCellLocation start_loc); -// Set the visibility of the split rows belonging to a transaction located at -// vcell_loc. -// -// If only_blank_split is TRUE, only the row used for entering an -// additional split is affected. Despite the name, this should not be confused -// with the "blank split" row used for entering the first split of a brand-new -// transaction. Instead, here it only refers to rows not tied to any split at -// all, such as those created for entering new splits on old transactions or -// the 2nd through nth split on brand-new transactions. +/** Set the visibility of the split rows belonging to a transaction located at + * vcell_loc. + * + * If only_blank_split is TRUE, only the row used for entering an + * additional split is affected. Despite the name, this should not be confused + * with the "blank split" row used for entering the first split of a brand-new + * transaction. Instead, here it only refers to rows not tied to any split at + * all, such as those created for entering new splits on old transactions or + * the 2nd through nth split on brand-new transactions. + */ void gnc_split_register_set_trans_visible (SplitRegister *reg, VirtualCellLocation vcell_loc, gboolean visible, @@ -190,7 +197,7 @@ CursorClass gnc_split_register_cursor_name_to_class (const char *cursor_name); gnc_numeric gnc_split_register_debcred_cell_value (SplitRegister *reg); -/* Determine if we need to perform any conversion on the splits in this +/** Determine if we need to perform any conversion on the splits in this * transaction, and if so, what conversion we need */ gboolean gnc_split_reg_has_rate_cell (SplitRegisterType type); @@ -199,4 +206,5 @@ gboolean gnc_split_register_split_needs_amount( gboolean gnc_split_register_needs_conv_rate( SplitRegister *reg, Transaction *txn, Account *acc); +/** @} */ #endif diff --git a/src/register/ledger-core/split-register.h b/src/register/ledger-core/split-register.h index c23beb429f..55626ac520 100644 --- a/src/register/ledger-core/split-register.h +++ b/src/register/ledger-core/split-register.h @@ -19,6 +19,14 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * * * \********************************************************************/ +#ifndef SPLIT_REGISTER_H +#define SPLIT_REGISTER_H + +#include + +#include "Transaction.h" +#include "table-allgui.h" + /** @addtogroup GUI * @{ */ @@ -27,80 +35,75 @@ */ /** @addtogroup SplitRegister Split Register * @brief GnuCash-specific ledger and journal displays based on - * @ref RegisterCore. + * RegisterCore. * - * @details The split register is a spreadsheet-like area that looks like - * a checkbook register. It displays transactions and allows the user to - * edit them in-place. The register does @b not contain any of the other - * window decorations that one might want to have for a free standing window - * (e.g. menubars, * toolbars, etc.) + * @details The split register is a spreadsheet-like area that looks like + * a checkbook register. It displays transactions and allows the user to + * edit them in-place. The register does @b not contain any of the other + * window decorations that one might want to have for a free standing window + * (e.g. menubars, * toolbars, etc.) * - * The layout of the register is configurable. There's a broad - * variety of cell types to choose from: date cells that know - * how to parse dates, price cells that know how to parse prices, - * etc. These cells can be laid out in any column; even a multi-row - * layout is supported. The name "split register" is derived from - * the fact that this register can display multiple rows of - * transaction splits underneath a transaction title/summary row. + * The layout of the register is configurable. There's a broad + * variety of cell types to choose from: date cells that know + * how to parse dates, price cells that know how to parse prices, + * etc. These cells can be laid out in any column; even a multi-row + * layout is supported. The name "split register" is derived from + * the fact that this register can display multiple rows of + * transaction splits underneath a transaction title/summary row. * - * An area for entering new transactions is provided at the bottom of - * the register. + * An area for entering new transactions is provided at the bottom of + * the register. * - * All user input to the register is handled by the 'cursor', which - * is mapped onto one of the displayed rows. + * All user input to the register is handled by the 'cursor', which + * is mapped onto one of the displayed rows. * - * @par Design Notes. - * @{ - * Some notes about the "blank split":@n - * Q: What is the "blank split"?@n - * A: A new, empty split appended to the bottom of the ledger - * window. The blank split provides an area where the user - * can type in new split/transaction info. - * The "blank split" is treated in a special way for a number - * of reasons: - * - it must always appear as the bottom-most split - * in the Ledger window, - * - it must be committed if the user edits it, and - * a new blank split must be created. - * - it must be deleted when the ledger window is closed. - * - * To implement the above, the register "user_data" is used - * to store an SRInfo structure containing the blank split. - * @} - * - * @par Some notes on Commit/Rollback: - * @{ - * There's an engine component and a gui component to the commit/rollback - * scheme. On the engine side, one must always call BeginEdit() - * before starting to edit a transaction. When you think you're done, - * you can call CommitEdit() to commit the changes, or RollbackEdit() to - * go back to how things were before you started the edit. Think of it as - * a one-shot mega-undo for that transaction. - * - * Note that the query engine uses the original values, not the currently - * edited values, when performing a sort. This allows your to e.g. edit - * the date without having the transaction hop around in the gui while you - * do it. - * - * On the gui side, commits are now performed on a per-transaction basis, - * rather than a per-split (per-journal-entry) basis. This means that - * if you have a transaction with a lot of splits in it, you can edit them - * all you want without having to commit one before moving to the next. + * @par Design Notes. + * Some notes about the "blank split":@n + * Q: What is the "blank split"?@n + * A: A new, empty split appended to the bottom of the ledger + * window. The blank split provides an area where the user + * can type in new split/transaction info. + * The "blank split" is treated in a special way for a number + * of reasons: + * - it must always appear as the bottom-most split + * in the Ledger window, + * - it must be committed if the user edits it, and + * a new blank split must be created. + * - it must be deleted when the ledger window is closed. + * @par + * To implement the above, the register "user_data" is used + * to store an SRInfo structure containing the blank split. * + * @par Some notes on Commit/Rollback: + * There's an engine component and a gui component to the commit/rollback + * scheme. On the engine side, one must always call BeginEdit() + * before starting to edit a transaction. When you think you're done, + * you can call CommitEdit() to commit the changes, or RollbackEdit() to + * go back to how things were before you started the edit. Think of it as + * a one-shot mega-undo for that transaction. + * @par + * Note that the query engine uses the original values, not the currently + * edited values, when performing a sort. This allows your to e.g. edit + * the date without having the transaction hop around in the gui while you + * do it. + * @par + * On the gui side, commits are now performed on a per-transaction basis, + * rather than a per-split (per-journal-entry) basis. This means that + * if you have a transaction with a lot of splits in it, you can edit them + * all you want without having to commit one before moving to the next. + * @par * Similarly, the "cancel" button will now undo the changes to all of the * lines in the transaction display, not just to one line (one split) at a * time. - * @} - * + * * @par Some notes on Reloads & Redraws: - * @{ * Reloads and redraws tend to be heavyweight. We try to use change flags * as much as possible in this code, but imagine the following scenario: - * + * @par * Create two bank accounts. Transfer money from one to the other. * Open two registers, showing each account. Change the amount in one window. * Note that the other window also redraws, to show the new correct amount. - * + * @par * Since you changed an amount value, potentially *all* displayed * balances change in *both* register windows (as well as the ledger * balance in the main window). Three or more windows may be involved @@ -108,26 +111,25 @@ * entering a paycheck (or correcting a typo in an old paycheck). * Changing a date might even cause all entries in all three windows * to be re-ordered. - * + * @par * The only thing I can think of is a bit stored with every table * entry, stating 'this entry has changed since lst time, redraw it'. * But that still doesn't avoid the overhead of reloading the table * from the engine. - * @} * - * The Register itself is independent of GnuCash, and is designed - * so that it can be used with other applications. - * The Ledger is an adaptation of the Register for use by GnuCash. - * The Ledger sets up an explicit visual layout, putting certain - * types of cells in specific locations (e.g. date on left, summary - * in middle, value at right), and hooks up these cells to - * the various GnuCash financial objects. + * The Register itself is independent of GnuCash, and is designed + * so that it can be used with other applications. + * The Ledger is an adaptation of the Register for use by GnuCash. + * The Ledger sets up an explicit visual layout, putting certain + * types of cells in specific locations (e.g. date on left, summary + * in middle, value at right), and hooks up these cells to + * the various GnuCash financial objects. * - * This code is also theoretically independent of the actual GUI - * toolkit/widget-set (it once worked with both Motif and Gnome). - * The actual GUI-toolkit specific code is supposed to be in a - * GUI portability layer. Over the years, some gnome-isms may - * have snuck in; these should also be cleaned up. + * This code is also theoretically independent of the actual GUI + * toolkit/widget-set (it once worked with both Motif and Gnome). + * The actual GUI-toolkit specific code is supposed to be in a + * GUI portability layer. Over the years, some gnome-isms may + * have snuck in; these should also be cleaned up. * * @{ */ @@ -135,15 +137,6 @@ * @brief API for checkbook register display area * @author Copyright (C) 1998-2000 Linas Vepstas */ -/** @{ */ - -#ifndef SPLIT_REGISTER_H -#define SPLIT_REGISTER_H - -#include - -#include "Transaction.h" -#include "table-allgui.h" /** @brief Register types * @@ -556,7 +549,6 @@ gnc_split_register_begin_edit_or_warn(SRInfo *info, Transaction *trans); /** @} */ /** @} */ /** @} */ -/** @} */ /* -------------------------------------------------------------- */ /** Private function -- outsiders must not use this */ diff --git a/src/register/register-core/basiccell.h b/src/register/register-core/basiccell.h index 6f287e8246..eae9420766 100644 --- a/src/register/register-core/basiccell.h +++ b/src/register/register-core/basiccell.h @@ -20,12 +20,30 @@ * * \********************************************************************/ -/* - * FILE: - * basiccell.h +/** @addtogroup RegisterCore Register Core + * @{ + * @addtogroup Cell Cell + * @brief A "Cell" is an active object which is designed to read a specific kind + * of user input. A Cell object has callbacks that are called when the + * user enters the cell (e.g. by mouse-clicking on a cell in a table, or + * tabbing into it), when the user attempts to modify text in the cell + * (e.g. by typing in it), and when the user leaves the cell (e.g. by + * mouse-clicking elsewhere, or tabbing away). * - * FUNCTION: - * The BasicCell class provides an abstract base class + * Special-purpose cells can be created by "inheriting" from the basic + * cell object. Thus, there are special-purpose cells for handling dates, + * pull-down menus, text fields with auto-completion from a list of + * alternatives, monetary amounts, etc. + * + * Cells implementations may or may not contain GUI code. Cells which + * require only that text be displayed are completely "GUI-independent", + * that is, they depend on the underlying table to display the text. Cells + * which require additional GUI elements (such as pull-down menus) must + * implement the proper GUI handling on their own (using, e.g., GTK). + * @{ + * @file basiccell.h + * @struct basic_cell + * @brief The BasicCell class provides an abstract base class * defining the handling of the editing of a cell of a table. * Classes that provide the actual handling for different * cell types should inherit from this class. @@ -130,8 +148,8 @@ * * The gui_private member may be used by the derived class to * store any additional GUI-specific data. - * - * HISTORY: + */ +/* HISTORY: * Copyright (c) 1998 Linas Vepstas * Copyright (c) 2000 Dave Peticolas */ @@ -190,11 +208,11 @@ struct basic_cell { char * cell_name; gchar *cell_type_name; - char * value; /* current value */ - guint value_chars; /* number of characters in value */ + char * value; /** current value */ + guint value_chars; /** number of characters in value */ - gboolean changed; /* true if value modified */ - gboolean conditionally_changed; /* true if value modified conditionally */ + gboolean changed; /** true if value modified */ + gboolean conditionally_changed; /** true if value modified conditionally */ /* "virtual", overloaded methods */ CellSetValueFunc set_value; @@ -212,14 +230,13 @@ struct basic_cell CellDestroyFunc gui_destroy; /* GUI information */ - char *sample_text; /* sample text for sizing purposes */ - CellAlignment alignment; /* horizontal alignment in column */ - gboolean expandable; /* can fill with extra space */ - gboolean span; /* can span multiple columns */ - gboolean is_popup; /* is a popup widget */ + char *sample_text; /** sample text for sizing purposes */ + CellAlignment alignment; /** horizontal alignment in column */ + gboolean expandable; /** can fill with extra space */ + gboolean span; /** can span multiple columns */ + gboolean is_popup; /** is a popup widget */ - /* general hook for gui-private data */ - gpointer gui_private; + gpointer gui_private; /** general hook for gui-private data */ }; @@ -260,4 +277,5 @@ void gnc_basic_cell_set_conditionally_changed (BasicCell *cell, void gnc_basic_cell_set_value_internal (BasicCell *bcell, const char *value); +/** @} @} */ #endif /* BASIC_CELL_H */ diff --git a/src/register/register-core/cell-factory.h b/src/register/register-core/cell-factory.h index fa140f3516..278ca77380 100644 --- a/src/register/register-core/cell-factory.h +++ b/src/register/register-core/cell-factory.h @@ -25,7 +25,10 @@ #define CELL_FACTORY_H #include "basiccell.h" - +/** @addtogroup Cell Cell + * @{ + * @file cell-factory.h + */ typedef struct cell_factory CellFactory; CellFactory * gnc_cell_factory_new (void); @@ -38,4 +41,5 @@ void gnc_cell_factory_add_cell_type (CellFactory *cf, BasicCell * gnc_cell_factory_make_cell (CellFactory *cf, const char *cell_type_name); +/** @} @} */ #endif diff --git a/src/register/register-core/cellblock.h b/src/register/register-core/cellblock.h index 345d88a4f2..f917412ad8 100644 --- a/src/register/register-core/cellblock.h +++ b/src/register/register-core/cellblock.h @@ -19,14 +19,18 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * * * \********************************************************************/ -/** @addtogroup GUI - * @{ - */ -/** @addtogroup Register Registers, Ledgers and Journals - * @{ - */ /** @addtogroup RegisterCore Register Core - * @{ + * @{ + * @addtogroup Cellblock Cellblock + * @brief A "Cellblock" is an array of active cells. The cells are laid out in + * rows and columns. The cellblock serves as a convenient container for + * organizing active cells in an array. Through the mechanism of Cursors + * (defined below), it allows a group of cells to be treated as a single + * transactional entity. That is, the cursor/cellblock allows all edits to a + * groups of cells to be simultaneously committed or rejected by underlying + * engines. This makes it appropriate for use as a GUI for + * transaction-processing applications with two-phase commit requirements. + * @{ */ /** @file cellblock.h * @brief Declarations for the CellBlock object @@ -60,14 +64,40 @@ typedef struct } CellBlock; +/** Create a new CellBlock on the heap. + * @param rows Number of rows. + * @param cols Number of columns. + * @param cursor_name A string name for the CellBlock. It will be copied with a + * new string on the heap. + * @return a newly-allocated CellBlock which should be deleted with + * gnc_cellblock_destroy. + */ CellBlock * gnc_cellblock_new (int rows, int cols, const char *cursor_name); +/** Delete a CellBlock and its Cells. + * @param cellblock The CellBlock to destroy. + */ void gnc_cellblock_destroy (CellBlock *cellblock); +/** Add a cell to the CellBlock at the specified coordinates. The CellBlock + * takes ownership of the Cell. If there's already a Cell at the location it + * will be leaked, so callers shoud first call gnc_cellblock_get_cell() and + * delete the result if it's not NULL. + * @param cellblock The CellBlock + * @param row The row at which to add the cell + * @param col The column at which to add the cell + * @param cell The cell to place at the coordinates. + */ void gnc_cellblock_set_cell (CellBlock *cellblock, int row, int col, BasicCell *cell); +/** Retrieve the Cell at the specified coordinates. + * @param cellblock The CellBlock + * @param row The row of the requested Cell + * @param col The column of the requested Cell + * @return A pointer to the requested Cell. + */ BasicCell * gnc_cellblock_get_cell (CellBlock *cellblock, int row, int col); @@ -90,13 +120,19 @@ BasicCell * gnc_cellblock_get_cell_by_name(CellBlock *cellblock, const char *cell_name, int *row, int *col); -/* Return number of changed cells. */ +/** Return number of changed cells. + * @param cursor The cellblock to query + * @param include_conditional If TRUE counts conditionally-changed cells + * @return The number of changed cells found. + */ int gnc_cellblock_changed (CellBlock *cursor, gboolean include_conditional); +/** Sets all cells in the cellblock to not changed. + * @param cursor The cellblock. + */ void gnc_cellblock_clear_changes (CellBlock *cursor); #endif /** @} */ /** @} */ -/** @} */ diff --git a/src/register/register-core/checkboxcell.h b/src/register/register-core/checkboxcell.h index fae3020100..20673d874d 100644 --- a/src/register/register-core/checkboxcell.h +++ b/src/register/register-core/checkboxcell.h @@ -19,13 +19,11 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * * * \********************************************************************/ - -/* - * FILE: - * checkboxcell.h - * - * FUNCTION: - * The CheckboxCell object implements a cell handler +/** @addtogroup Cell Cell + * @{ + * @file checkboxcell.h + * @struct CheckboxCell + * @brief The CheckboxCell object implements a cell handler * that will toggle between yes and no values when clicked upon by the mouse. * * HISTORY: @@ -52,5 +50,5 @@ BasicCell * gnc_checkbox_cell_new (void); void gnc_checkbox_cell_set_flag (CheckboxCell *cell, gboolean flag); gboolean gnc_checkbox_cell_get_flag (CheckboxCell *cell); const char* gnc_checkbox_cell_get_string (gboolean flag); - +/** @} */ #endif diff --git a/src/register/register-core/combocell.h b/src/register/register-core/combocell.h index 1490b55050..e04171b090 100644 --- a/src/register/register-core/combocell.h +++ b/src/register/register-core/combocell.h @@ -20,8 +20,10 @@ * * \********************************************************************/ -/** +/** @addtogroup Cell Cell + * @{ * @file combocell.h + * @struct ComboCell * @brief The ComboCell object implements a cell handler with a * "combination-box" pull-down menu in it. * @@ -99,4 +101,5 @@ void gnc_combo_cell_use_quickfill_cache (ComboCell *cell, QuickFill *shared_qf); void gnc_combo_cell_use_list_store_cache (ComboCell * cell, gpointer data); +/** @} */ #endif diff --git a/src/register/register-core/datecell.h b/src/register/register-core/datecell.h index 0593560e0d..0f72b58bc1 100644 --- a/src/register/register-core/datecell.h +++ b/src/register/register-core/datecell.h @@ -20,12 +20,11 @@ * * \********************************************************************/ -/* - * FILE: - * datecell.h - * - * FUNCTION: - * The DateCell object implements a date handling cell. It +/** @addtogroup Cell Cell + * @{ + * @file datecell.h + * @struct DateCell + * @brief The DateCell object implements a date handling cell. It * is able to display dates in several formats, it is also * able to accept date input, and also supports a number of accelerator * keys. @@ -69,22 +68,6 @@ * * * METHODS: - * The xaccSetDateCellValue() method accepts a numeric date and - * sets the contents of the date cell to that value. The - * value day, month, year should follow the regular written - * conventions, i.e. day==(1..31), mon==(1..12), year==4 digits - * - * The xaccCommitDateCell() method commits any pending changes to the - * value of the cell. That is, it will take the cells current string - * value, and parse it into a month-day-year value. - * - * Why is this needed? Basically, while the user is typing into the - * cell, we do not even try to parse the date, lest we confuse things - * royally. Normally, when the user leaves this cell, and moves to - * another, we parse the date and print it nicely and cleanly into - * the cell. But it can happen that we want to get the accurate contents - * of the date cell before we've left it, e.g. if the user has clicked - * on the "commit" button. This is the routine to call for that. * * HISTORY: * Copyright (c) 1998, 1999, 2000 Linas Vepstas @@ -100,23 +83,53 @@ #include "qof.h" -typedef struct date_cell +typedef struct { BasicCell cell; } DateCell; -/* installs a callback to handle date recording */ +/** installs a callback to handle date recording */ BasicCell * gnc_date_cell_new (void); -/* days are 1-31, mon is 1-12, year 1900 == 1900 */ +/** Accepts a numeric date and sets the contents of the date cell to that value. + * The value day, month, year should follow the regular written conventions. + * @param cell The DateCell to set + * @param day The day of the month, 1..31 + * @param month The month of the year, 1..12 + * @param year The year, 4 digits, common era + */ void gnc_date_cell_set_value (DateCell *cell, int day, int mon, int year); +/** Sets the contents of the cell with seconds before or since the Unix epoch. + * @param cell The DateCell to set + * @param secs Seconds before or since the Unix epoch, 1 January 1970 CE. + */ void gnc_date_cell_set_value_secs (DateCell *cell, time64 secs); +/** Commits any pending changes to the value of the cell. That is, it will take + * the cells current string value, and parse it into a month-day-year value. + * + * Why is this needed? Basically, while the user is typing into the cell, we do + * not even try to parse the date, lest we confuse things royally. Normally, + * when the user leaves this cell, and moves to another, we parse the date and + * print it nicely and cleanly into the cell. But it can happen that we want to + * get the accurate contents of the date cell before we've left it, e.g. if the + * user has clicked on the "commit" button. This is the routine to call for + * that. +*/ void gnc_date_cell_commit (DateCell *cell); +/** Set a Timespec to the value in the DateCell. + * @param cell The DateCell + * @param ts A Timespec* to which the function will write the date. + */ void gnc_date_cell_get_date (DateCell *cell, Timespec *ts); -void gnc_date_cell_get_date_gdate (DateCell *cell, GDate *date); +/** Timespec to the value in the DateCell. + * @param cell The DateCell + * @param date A GDate* into which the functino will write the date. + */ +void gnc_date_cell_get_date_gdate (DateCell *cell, GDate *date); +/** @} */ #endif diff --git a/src/register/register-core/formulacell.h b/src/register/register-core/formulacell.h index 1d2a242e12..058e006b21 100644 --- a/src/register/register-core/formulacell.h +++ b/src/register/register-core/formulacell.h @@ -19,18 +19,15 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * \********************************************************************/ -/** - * FILE: - * formulacell.h - * - * FUNCTION: - * - * The FormulaCell is a register-table cell which can contain a formula +/** @addtogroup Cell Cell + * @{ + * @file formulacell.h + * @struct FormulaCell + * @brief The FormulaCell is a register-table cell which can contain a formula * involving numbers, formula markup and strings denoting either functions or * variables. - * - * Copyright (c) 2002 Joshua Sled - **/ + */ + /* Copyright (c) 2002 Joshua Sled */ #ifndef FORMULA_CELL_H #define FORMULA_CELL_H @@ -42,7 +39,7 @@ #include "basiccell.h" #include "qof.h" -typedef struct _FormulaCell +typedef struct { BasicCell cell; @@ -57,8 +54,7 @@ typedef struct _FormulaCell BasicCell* gnc_formula_cell_new (void); void gnc_formula_cell_set_value( FormulaCell *fc, const char *newVal ); - +/** @} */ #endif /* FORMULA_CELL_H */ /* --------------- end of file ---------------------- */ - diff --git a/src/register/register-core/gtable.h b/src/register/register-core/gtable.h index e74f10b499..b46e14938b 100644 --- a/src/register/register-core/gtable.h +++ b/src/register/register-core/gtable.h @@ -25,11 +25,12 @@ #include - -/* This is the API for GTables, a datatype for 2-dimensional tables +/** @addtogroup Table Table + * @{ + * @file gtable.h + * This is the API for GTables, a datatype for 2-dimensional tables * with automatic resizing and memory management. * - * HACK ALERT -- this thing should proably become a part of glib (??) */ typedef struct GTable GTable; @@ -38,7 +39,7 @@ typedef void (*g_table_entry_constructor) (gpointer entry, gpointer user_data); typedef void (*g_table_entry_destroyer) (gpointer entry, gpointer user_data); -/* Create a new table with the given entry constructor and destroyer. +/** Create a new table with the given entry constructor and destroyer. * Both functions must be given. They are used to initialize the table * entries and free unneeded memory when resizing and destroying. */ GTable * g_table_new (guint entry_size, @@ -46,14 +47,14 @@ GTable * g_table_new (guint entry_size, g_table_entry_destroyer destroyer, gpointer user_data); -/* Free the table and all associated table elements. */ +/** Free the table and all associated table elements. */ void g_table_destroy (GTable *gtable); -/* Return the element at the given row and column. If the coordinates +/** Return the element at the given row and column. If the coordinates * are out-of-bounds, return NULL */ gpointer g_table_index (GTable *gtable, int row, int col); -/* Resize the table, allocating and deallocating extra table +/** Resize the table, allocating and deallocating extra table * members if needed. The relationship between table members * before and after resizing is undefined, except in the case * where the number of rows changes, but not the number of @@ -61,10 +62,11 @@ gpointer g_table_index (GTable *gtable, int row, int col); * first. */ void g_table_resize (GTable *gtable, int rows, int cols); -/* Return the number of table rows. */ +/** Return the number of table rows. */ int g_table_rows (GTable *gtable); -/* Return the number of table columns. */ +/** Return the number of table columns. */ int g_table_cols (GTable *gtable); +/** @} */ #endif diff --git a/src/register/register-core/numcell.h b/src/register/register-core/numcell.h index b25fd0d61a..dd62d3f386 100644 --- a/src/register/register-core/numcell.h +++ b/src/register/register-core/numcell.h @@ -20,15 +20,14 @@ * * \********************************************************************/ -/* - * FILE: - * numcell.h - * - * FUNCTION: - * The NumCell object implements a number handling cell. It +/** @addtogroup Cell Cell + * @{ + * @file numcell.h + * @struct NumCell + * @brief The NumCell object implements a number handling cell. It * supports a number of accelerator keys for number entry. - * - * HISTORY: + */ + /* HISTORY: * Copyright (c) 2000 Dave Peticolas */ @@ -48,5 +47,5 @@ BasicCell * gnc_num_cell_new (void); void gnc_num_cell_set_value (NumCell *cell, const char *str); gboolean gnc_num_cell_set_last_num (NumCell *cell, const char *str); - +/** @} */ #endif diff --git a/src/register/register-core/pricecell.h b/src/register/register-core/pricecell.h index 10c4bb2f58..47025ec79f 100644 --- a/src/register/register-core/pricecell.h +++ b/src/register/register-core/pricecell.h @@ -20,12 +20,11 @@ * * \********************************************************************/ -/* - * FILE: - * pricecell.h - * - * FUNCTION: - * The PriceCell object implements a cell handler that stores +/** @addtogroup Cell Cell + * @{ + * @file pricecell.h + * @struct PriceCell + * @brief The PriceCell object implements a cell handler that stores * a single double-precision value, and has the smarts to * display it as a price/amount as well as accepting monetary * or general numeric input. @@ -34,8 +33,8 @@ * * On output, it will display negative values in red text. * hack alert -- the actual color (red) should be user configurable. - * - * HISTORY: + */ + /* HISTORY: * Copyright (c) 1998, 1999, 2000 Linas Vepstas * Copyright (c) 2000 Dave Peticolas * Copyright (c) 2001 Free Software Foundation @@ -51,47 +50,42 @@ typedef struct { BasicCell cell; - - gnc_numeric amount; /* the amount associated with this cell */ - - int fraction; /* fraction used for rounding, if 0 no rounding */ - - gboolean blank_zero; /* controls printing of zero values */ - - GNCPrintAmountInfo print_info; /* amount printing context */ - - gboolean need_to_parse; /* internal */ + gnc_numeric amount; /** the amount associated with this cell */ + int fraction; /** fraction used for rounding, if 0 no rounding */ + gboolean blank_zero; /** controls printing of zero values */ + GNCPrintAmountInfo print_info; /** amount printing context */ + gboolean need_to_parse; /** internal */ } PriceCell; -/* installs a callback to handle price recording */ +/** installs a callback to handle price recording */ BasicCell * gnc_price_cell_new (void); -/* return the value of a price cell */ +/** return the value of a price cell */ gnc_numeric gnc_price_cell_get_value (PriceCell *cell); -/* updates amount, returns TRUE if string representation +/** updates amount, returns TRUE if string representation * actually changed */ gboolean gnc_price_cell_set_value (PriceCell *cell, gnc_numeric amount); -/* Sets the fraction used for rounding. If 0, no rounding is performed. */ +/** Sets the fraction used for rounding. If 0, no rounding is performed. */ void gnc_price_cell_set_fraction (PriceCell *cell, int fraction); -/* Sets the cell as blank, regardless of the blank_zero value */ +/** Sets the cell as blank, regardless of the blank_zero value */ void gnc_price_cell_blank (PriceCell *cell); -/* determines whether 0 values are left blank or printed. +/** determines whether 0 values are left blank or printed. * defaults to true. */ void gnc_price_cell_set_blank_zero (PriceCell *cell, gboolean blank_zero); -/* set the printing context of the price cell */ +/** set the printing context of the price cell */ void gnc_price_cell_set_print_info (PriceCell *cell, GNCPrintAmountInfo print_info); -/* updates two cells; the deb cell if amt is negative, the credit cell +/** updates two cells; the deb cell if amt is negative, the credit cell * if amount is positive, and makes the other cell blank. */ void gnc_price_cell_set_debt_credit_value (PriceCell *debit, PriceCell *credit, gnc_numeric amount); - +/** @} */ #endif diff --git a/src/register/register-core/quickfillcell.h b/src/register/register-core/quickfillcell.h index e5e8023fec..71cfebd231 100644 --- a/src/register/register-core/quickfillcell.h +++ b/src/register/register-core/quickfillcell.h @@ -20,26 +20,19 @@ * * \********************************************************************/ -/* - * FILE: - * quickfillcell.h - * - * FUNCTION: - * The QuickFillCell implements a text cell with quick-fill +/** @addtogroup Cell Cell + * @{ + * @file quickfillcell.h + * @struct QuickFillCell + * @brief The QuickFillCell implements a text cell with quick-fill * capabilities. By "quick fill" we mean a cell that will * automatically sentence-complete the entry after the user * typed a sufficient number of letters to identify a unique * entry. * * On the output side, this is just a plain text cell. - * - * METHODS: - * The xaccSetQuickFillCellValue() method sets the - * current cell value to the indicated string, - * simultaneously adding the string to the quick-fill - * tree. - * - * HISTORY: + */ +/* HISTORY: * Copyright (c) 1997, 1998 Linas Vepstas * Copyright (c) 2000 Dave Peticolas */ @@ -53,31 +46,31 @@ typedef struct { BasicCell cell; - QuickFill *qf; /* quickfill-tree handled by this cell */ - - QuickFillSort sort; /* determines order of strings matched. - * default is QUICKFILL_LIFO. */ - - char *original; /* original string entered in original case */ - - gboolean use_quickfill_cache; /* If TRUE, we don't own the qf */ + QuickFill *qf; /** quickfill-tree handled by this cell */ + QuickFillSort sort; /** determines order of strings matched. + * default is QUICKFILL_LIFO. */ + char *original; /** original string entered in original case */ + gboolean use_quickfill_cache; /** If TRUE, we don't own the qf */ } QuickFillCell; BasicCell * gnc_quickfill_cell_new (void); +/** sets the current cell value to the indicated string, simultaneously adding + * the string to the quick-fill tree. + */ void gnc_quickfill_cell_set_value (QuickFillCell *cell, - const char *value); + const char *value); void gnc_quickfill_cell_set_sort (QuickFillCell *cell, - QuickFillSort sort); + QuickFillSort sort); void gnc_quickfill_cell_add_completion (QuickFillCell *cell, - const char *completion); + const char *completion); /** Lets the cell use the given shared quickfill object instead of the * one it owns internally. The cell will not delete the shared * quickfill upon destruction. */ void gnc_quickfill_cell_use_quickfill_cache (QuickFillCell *cell, QuickFill *shared_qf); - +/** @} */ #endif diff --git a/src/register/register-core/recncell.h b/src/register/register-core/recncell.h index 27b6ba77ba..7017b9c7b3 100644 --- a/src/register/register-core/recncell.h +++ b/src/register/register-core/recncell.h @@ -20,16 +20,15 @@ * * \********************************************************************/ -/* - * FILE: - * recncell.h - * - * FUNCTION: - * The RecnCell object implements a cell handler +/** @addtogroup Cell Cell + * @{ + * @file recncell.h + * @struct RecnCell + * @brief The RecnCell object implements a cell handler * that will cycle through a series of single-character * values when clicked upon by the mouse. - * - * HISTORY: + */ +/* HISTORY: * Copyright (c) 1998 Linas Vepstas * Copyright (c) 2000 Dave Peticolas * Copyright (c) 2001 Derek Atkins @@ -49,11 +48,11 @@ typedef struct { BasicCell cell; - char flag; /* The actual flag value */ + char flag; /** The actual flag value */ - char * valid_flags; /* The list of valid flags */ - char * flag_order; /* Automatic flag selection order */ - char default_flag; /* Default flag for unknown user input */ + char * valid_flags; /** The list of valid flags */ + char * flag_order; /** Automatic flag selection order */ + char default_flag; /** Default flag for unknown user input */ RecnCellStringGetter get_string; RecnCellConfirm confirm_cb; @@ -62,27 +61,25 @@ typedef struct BasicCell * gnc_recn_cell_new (void); -void gnc_recn_cell_set_flag (RecnCell *cell, char flag); -char gnc_recn_cell_get_flag (RecnCell *cell); +void gnc_recn_cell_set_flag (RecnCell *cell, char flag); +char gnc_recn_cell_get_flag (RecnCell *cell); -void gnc_recn_cell_set_confirm_cb (RecnCell *cell, - RecnCellConfirm confirm_cb, - gpointer data); +void gnc_recn_cell_set_confirm_cb (RecnCell *cell, + RecnCellConfirm confirm_cb, + gpointer data); -void gnc_recn_cell_set_string_getter (RecnCell *cell, - RecnCellStringGetter getter); +void gnc_recn_cell_set_string_getter (RecnCell *cell, + RecnCellStringGetter getter); -/* - * note that chars is copied into the RecnCell directly, but remains +/** note that chars is copied into the RecnCell directly, but remains * the "property" of the caller. The caller must maintain the chars * pointer, and the caller must setup a mechanism to 'free' the chars * pointer. The rationale is that you may have many RecnCell objects * that use the same set of flags -- this saves you an alloc/free for * each cell. - warlord 2001-11-28 */ -void gnc_recn_cell_set_valid_flags (RecnCell *cell, const char *flags, - char default_flag); -void gnc_recn_cell_set_flag_order (RecnCell *cell, const char *flags); - +void gnc_recn_cell_set_valid_flags (RecnCell *cell, const char *flags, + char default_flag); +void gnc_recn_cell_set_flag_order (RecnCell *cell, const char *flags); +/** @} */ #endif - diff --git a/src/register/register-core/register-common.h b/src/register/register-core/register-common.h index adbf3f0a79..6d1990a18c 100644 --- a/src/register/register-core/register-common.h +++ b/src/register/register-core/register-common.h @@ -79,7 +79,7 @@ void gnc_register_add_cell_type (const char *cell_type_name, BasicCell * gnc_register_make_cell (const char *cell_type_name); -/* The VirtualCellLocation structure contains the virtual +/** The VirtualCellLocation structure contains the virtual * location of a virtual cell. */ typedef struct _VirtualCellLocation VirtualCellLocation; @@ -94,7 +94,7 @@ gboolean virt_cell_loc_equal (VirtualCellLocation vcl1, VirtualCellLocation vcl2); -/* The VirtualLocation structure contains the virtual +/** The VirtualLocation structure contains the virtual * location of a physical cell. * * There is one instance of Locator for each physical cell. diff --git a/src/register/register-core/table-allgui.h b/src/register/register-core/table-allgui.h index 2738738f08..d96c8fc324 100644 --- a/src/register/register-core/table-allgui.h +++ b/src/register/register-core/table-allgui.h @@ -19,15 +19,39 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * * * \********************************************************************/ -/** @addtogroup GUI - * @{ - */ -/** @addtogroup Register Registers, Ledgers and Journals - * @{ - */ /** @addtogroup RegisterCore Register Core * @{ */ +/** @addtogroup Table Table + * @brief The "Table" is a displayed matrix. The table + * is a complex object; it is @b not merely a @ref Cellblock. The table provides + * all of the GUI infrastructure for displaying a row-column matrix of strings. + * + * The table provides one very important function for minimizing memory usage + * for large matrixes - the notion of a "Cursor". The cursor is a @ref Cellblock + * (an array of active cells) that is moved to the location that the user is + * currently editing. The cursor "virtualizes" @ref Cell functions; that is, it + * makes it seem to the user as if all cells in the table are active, when in + * fact the only cell that actually needs to be active is the one that the user + * is currently editing. + * + * The table design allows multiple cursors to be defined. When a user enters a + * cell, the appropriate cursor is positioned within the table. Cursors cannot + * overlap: any given cell can be mapped to at most one cursor. Multiple-cursor + * support allows tables to be designed that have a non-uniform layout. For + * example, the multiple-cursor support can be used to define a tree structure + * of headings and sub-headings, where the layout/format of the heading is + * different from the sub-headings. A financial example is a table which lists + * splits underneath their parent transaction. This is very different from a + * checkbook register, where all entries are uniform, and can be handled with a + * single repeated cursor. + * + * Users of the table must provide a TableView object which provides an API the + * table uses to obtain information about the data it is displaying such as + * strings, colors, etc. Thus, the table represents the non-GUI portion of the + * View object in the Model-View-Controller paradigm. + * @{ + */ /** @file table-allgui.h * @brief Declarations for the Table object * @author Copyright (c) 1998,1999,2000 Linas Vepstas @@ -43,8 +67,6 @@ * - Tab-traversing mechanism so that operator can tab in a * predefined order between cells. * - * Please see src/doc/design/gnucash-design.info for additional information. - * * This implements the gui-independent parts of the table * infrastructure. Additional, GUI-dependent parts are implemented * in table-gnome.c. @@ -106,15 +128,15 @@ physical row 11 virtual row 9 B #include "table-layout.h" #include "table-model.h" -/* The VirtualCell structure holds information about each virtual cell. */ +/** holds information about each virtual cell. */ typedef struct { - CellBlock *cellblock; /* Array of physical cells */ - gpointer vcell_data; /* Used by higher-level code */ + CellBlock *cellblock; /** Array of physical cells */ + gpointer vcell_data; /** Used by higher-level code */ /* flags */ - unsigned int visible : 1; /* visible in the GUI */ - unsigned int start_primary_color : 1; /* color usage flag */ + unsigned int visible : 1; /** visible in the GUI */ + unsigned int start_primary_color : 1; /** color usage flag */ } VirtualCell; typedef struct table Table; @@ -189,7 +211,7 @@ typedef enum -/* Alternative color tables to use for the register. +/** Alternative color tables to use for the register. * The colors in this array are ordered according to the RegisterColor Enum * Be careful to respect this order ! */ @@ -243,7 +265,7 @@ static const guint32 reg_colors_gtkrc [] = }; -/* Set the default gui handlers used by new tables. */ +/** Set the default gui handlers used by new tables. */ void gnc_table_set_default_gui_handlers (TableGUIHandlers *gui_handlers); /* Functions to create and destroy Tables. */ @@ -273,8 +295,8 @@ gboolean gnc_table_get_current_cell_location (Table *table, VirtualLocation *virt_loc); -/* This function checks the given location and returns true - * if it is out of bounds of the table. */ +/** checks the given location and returns true if it is out of bounds of the + * table. */ gboolean gnc_table_virtual_cell_out_of_bounds (Table *table, VirtualCellLocation vcell_loc); @@ -282,9 +304,8 @@ gboolean gnc_table_virtual_location_in_header (Table *table, VirtualLocation virt_loc); -/* This function returns the virtual cell associated with a particular - * virtual location. If the location is out of bounds, NULL is * - * returned. */ +/** returns the virtual cell associated with a particular virtual location. If + * the location is out of bounds, NULL is * returned. */ VirtualCell * gnc_table_get_virtual_cell (Table *table, VirtualCellLocation vcell_loc); @@ -326,88 +347,84 @@ gboolean gnc_table_get_cell_location (Table *table, void gnc_table_save_cells (Table *table, gpointer save_data); -/* Return the virtual cell of the header */ +/** Return the virtual cell of the header */ VirtualCell * gnc_table_get_header_cell (Table *table); -/* The gnc_table_set_size() method will resize the table to the +/** The gnc_table_set_size() method will resize the table to the * indicated dimensions. */ void gnc_table_set_size (Table * table, int virt_rows, int virt_cols); -/* Indicate what handler should be used for a given virtual block */ +/** Indicate what handler should be used for a given virtual block */ void gnc_table_set_vcell (Table *table, CellBlock *cursor, gconstpointer vcell_data, gboolean visible, gboolean start_primary_color, VirtualCellLocation vcell_loc); -/* Set the virtual cell data for a particular location. */ +/** Set the virtual cell data for a particular location. */ void gnc_table_set_virt_cell_data (Table *table, VirtualCellLocation vcell_loc, gconstpointer vcell_data); -/* Set the visibility flag for a particular location. */ +/** Set the visibility flag for a particular location. */ void gnc_table_set_virt_cell_visible (Table *table, VirtualCellLocation vcell_loc, gboolean visible); -/* Set the cellblock handler for a virtual cell. */ +/** Set the cellblock handler for a virtual cell. */ void gnc_table_set_virt_cell_cursor (Table *table, VirtualCellLocation vcell_loc, CellBlock *cursor); -/* The gnc_table_move_cursor() method will move the cursor (but not - * the cursor GUI) to the indicated location. This function is - * useful when loading the table from the cursor: data can be loaded - * into the cursor, then committed to the table, all without the - * annoying screen flashing associated with GUI redraw. */ +/** will move the cursor (but not the cursor GUI) to the indicated + * location. This function is useful when loading the table from the cursor: + * data can be loaded into the cursor, then committed to the table, all + * without the annoying screen flashing associated with GUI redraw. */ void gnc_table_move_cursor (Table *table, VirtualLocation virt_loc); -/* The gnc_table_move_cursor_gui() method will move the cursor and its - * GUI to the indicated location. Through a series of callbacks, all - * GUI elements get repositioned. */ +/** will move the cursor and its GUI to the indicated location. Through a series + * of callbacks, all GUI elements get repositioned. */ void gnc_table_move_cursor_gui (Table *table, VirtualLocation virt_loc); -/* The gnc_table_verify_cursor_position() method checks the location - * of the cursor with respect to a virtual location position, and if - * the resulting virtual location has changed, repositions the - * cursor and gui to the new position. Returns true if the cell - * cursor was repositioned. */ +/** checks the location of the cursor with respect to a virtual location + * position, and if the resulting virtual location has changed, repositions + * the cursor and gui to the new position. Returns true if the cell cursor was + * repositioned. */ gboolean gnc_table_verify_cursor_position (Table *table, VirtualLocation virt_loc); -/* The gnc_table_get_vcell_data() method returns the virtual cell data - * associated with a cursor located at the given virtual coords, or - * NULL if the coords are out of bounds. */ +/** returns the virtual cell data associated with a cursor located at the given + * virtual coords, or NULL if the coords are out of bounds. */ gpointer gnc_table_get_vcell_data (Table *table, VirtualCellLocation vcell_loc); -/* Find a close valid cell. If exact_cell is true, cells that must - * be explicitly selected by the user (as opposed to just tabbing - * into), are considered valid cells. */ +/** Find a close valid cell. If exact_cell is true, cells that must + * be explicitly selected by the user (as opposed to just tabbing + * into), are considered valid cells. */ gboolean gnc_table_find_close_valid_cell (Table *table, VirtualLocation *virt_loc, gboolean exact_cell); /** UI-specific functions *******************************/ -/* Initialize the GUI from a table */ +/** Initialize the GUI from a table */ void gnc_table_init_gui (GtkWidget *widget, gchar * state_section); void gnc_table_realize_gui (Table *table); -/* Refresh the current cursor gui */ +/** Refresh the current cursor gui */ void gnc_table_refresh_current_cursor_gui (Table * table, gboolean do_scroll); -/* Refresh the whole GUI from the table. */ +/** Refresh the whole GUI from the table. */ void gnc_table_refresh_gui (Table *table, gboolean do_scroll); -/* Try to show the whole range in the register. */ +/** Try to show the whole range in the register. */ void gnc_table_show_range (Table *table, VirtualCellLocation start_loc, VirtualCellLocation end_loc); -/* Refresh the cursor in the given location. If do_scroll is TRUE, +/** Refresh the cursor in the given location. If do_scroll is TRUE, * scroll the register so the location is in view. */ void gnc_table_refresh_cursor_gui (Table * table, VirtualCellLocation vcell_loc, @@ -480,4 +497,3 @@ gboolean gnc_table_traverse_update(Table *table, #endif /* TABLE_ALLGUI_H */ /** @} */ /** @} */ -/** @} */ diff --git a/src/register/register-core/table-control.h b/src/register/register-core/table-control.h index 75be76fcaf..2600915107 100644 --- a/src/register/register-core/table-control.h +++ b/src/register/register-core/table-control.h @@ -25,6 +25,10 @@ #include "register-common.h" +/** @addtogroup Table Table + * @{ + * @file table-control.h + */ typedef enum { GNC_TABLE_TRAVERSE_POINTER, @@ -61,4 +65,5 @@ void gnc_table_control_destroy (TableControl *control); void gnc_table_control_allow_move (TableControl *control, gboolean allow_move); +/** @} */ #endif diff --git a/src/register/register-core/table-layout.h b/src/register/register-core/table-layout.h index 7f69affc1b..80a45d514a 100644 --- a/src/register/register-core/table-layout.h +++ b/src/register/register-core/table-layout.h @@ -28,7 +28,10 @@ #include "basiccell.h" #include "cellblock.h" - +/** @addtogroup Table Table + * @{ + * @file table-layout.h + */ /** Standard Cursor Names ********************************************/ #define CURSOR_HEADER "cursor-header" @@ -79,5 +82,5 @@ void gnc_table_layout_save_cursor (TableLayout *layout, void gnc_table_layout_restore_cursor (TableLayout *layout, CellBlock *cursor, CursorBuffer *buffer); - +/** @} */ #endif diff --git a/src/register/register-core/table-model.h b/src/register/register-core/table-model.h index 741fa9d015..268757e8a0 100644 --- a/src/register/register-core/table-model.h +++ b/src/register/register-core/table-model.h @@ -30,6 +30,10 @@ #include "basiccell.h" #include "register-common.h" +/** @addtogroup Table Table + * @{ + * @file table-model.h + */ typedef enum { XACC_CELL_ALLOW_NONE = 0, @@ -246,5 +250,5 @@ TableSaveHandler gnc_table_model_get_pre_save_handler (TableModel *model); TableSaveHandler gnc_table_model_get_post_save_handler (TableModel *model); - +/** @} */ #endif diff --git a/src/register/register-gnome/formulacell-gnome.h b/src/register/register-gnome/formulacell-gnome.h index 91e0591606..45563b2b47 100644 --- a/src/register/register-gnome/formulacell-gnome.h +++ b/src/register/register-gnome/formulacell-gnome.h @@ -17,15 +17,18 @@ * Boston, MA 02110-1301, USA gnu@gnu.org * * * \********************************************************************/ - -/* formulacell-gnome.h - * - * Implements gnome dependent formula cell functions. +/** @ingroup Register + * @{ + * @addtogroup Gnome + * @{ + */ +/** @file formulacell-gnome.h + * @brief Implements gnome dependent formula cell functions. */ #ifndef FORMULACELL_GNOME_H #define FORMULACELL_GNOME_H BasicCell * gnc_formula_cell_gnome_new( void ); - +/** @} */ #endif /* !FORMULACELL_GNOME_H */ diff --git a/src/register/register-gnome/gnucash-color.h b/src/register/register-gnome/gnucash-color.h index 2c54f54da6..dcd9f6c877 100644 --- a/src/register/register-gnome/gnucash-color.h +++ b/src/register/register-gnome/gnucash-color.h @@ -25,9 +25,16 @@ #include +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-color.h + * @brief Wrap GdkColor for use in Register Gnome classes. + */ void gnucash_color_init (void); -/* Return the pixel value for the given red, green and blue */ +/** Return the pixel value for the given red, green and blue */ gulong gnucash_color_alloc (gushort red, gushort green, gushort blue); void gnucash_color_alloc_name (const char *name, GdkColor *color); void gnucash_color_alloc_gdk (GdkColor *color); @@ -35,5 +42,5 @@ GdkColor *gnucash_color_argb_to_gdk (guint32 argb); extern GdkColor gn_white, gn_light_gray, gn_dark_gray; extern GdkColor gn_black, gn_blue, gn_red, gn_yellow; - +/** @} */ #endif /* GNUCASH_COLOR_H */ diff --git a/src/register/register-gnome/gnucash-cursor.h b/src/register/register-gnome/gnucash-cursor.h index e11821d6fd..d3b1f4b2b3 100644 --- a/src/register/register-gnome/gnucash-cursor.h +++ b/src/register/register-gnome/gnucash-cursor.h @@ -25,7 +25,13 @@ #include "gnucash-sheet.h" #include - +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-cursor.h + * @brief Public declarations for GnucashCursor class + */ #define GNUCASH_TYPE_CURSOR (gnucash_cursor_get_type ()) #define GNUCASH_CURSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNUCASH_TYPE_CURSOR, GnucashCursor)) #define GNUCASH_CURSOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNUCASH_TYPE_CURSOR, GnucashCursorClass)) @@ -103,7 +109,5 @@ void gnucash_cursor_set_style (GnucashCursor *cursor, SheetBlockStyle *style); void gnucash_cursor_configure (GnucashCursor *cursor); - +/** @} */ #endif /* GNUCASH_CURSOR_H */ - - diff --git a/src/register/register-gnome/gnucash-date-picker.h b/src/register/register-gnome/gnucash-date-picker.h index 563f1b6259..175c000fa7 100644 --- a/src/register/register-gnome/gnucash-date-picker.h +++ b/src/register/register-gnome/gnucash-date-picker.h @@ -24,7 +24,13 @@ #define GNUCASH_DATE_PICKER_H #include - +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-date-picker.h + * @brief Public declarations for GncDatePicker class + */ #define GNC_DATE_PICKER(obj) G_TYPE_CHECK_INSTANCE_CAST((obj), gnc_date_picker_get_type (), GNCDatePicker) #define GNC_DATE_PICKER_CLASS(k) G_TYPE_CHECK_CLASS_CAST((k), gnc_date_picker_get_type (), GNCDatePickerClass) #define IS_GNC_DATE_PICKER(o) G_TYPE_CHECK_INSTANCE_TYPE((o), gnc_date_picker_get_type ()) @@ -62,5 +68,5 @@ typedef struct } GNCDatePickerClass; - +/** @} */ #endif /* GNUCASH_DATE_PICKER_H */ diff --git a/src/register/register-gnome/gnucash-grid.h b/src/register/register-gnome/gnucash-grid.h index 87d16203df..8efdcdd962 100644 --- a/src/register/register-gnome/gnucash-grid.h +++ b/src/register/register-gnome/gnucash-grid.h @@ -24,6 +24,13 @@ #include "table-allgui.h" #include "gnucash-sheet.h" +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-grid.h + * @brief GnucashGrid declarations + */ #define GNUCASH_TYPE_GRID (gnucash_grid_get_type ()) #define GNUCASH_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GNUCASH_TYPE_GRID, GnucashGrid)) @@ -42,7 +49,5 @@ gboolean gnucash_grid_find_loc_by_pixel (GnucashGrid *grid, gint x, gint y, void gnucash_draw_hatching (GdkDrawable *drawable, GdkGC *gc, int x, int y, int width, int height); - +/** @} */ #endif /* GNUCASH_GRID_H */ - - diff --git a/src/register/register-gnome/gnucash-header.h b/src/register/register-gnome/gnucash-header.h index fa2091a715..cb94f4187c 100644 --- a/src/register/register-gnome/gnucash-header.h +++ b/src/register/register-gnome/gnucash-header.h @@ -21,7 +21,13 @@ #ifndef GNUCASH_HEADER_H #define GNUCASH_HEADER_H - +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-header.h + * @brief Public declarations for GnucashHeader class + */ #define GNC_TYPE_HEADER (gnc_header_get_type ()) #define GNC_HEADER(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GNC_TYPE_HEADER, GncHeader)) #define GNC_HEADER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_HEADER, GncHeaderClass)) @@ -68,6 +74,5 @@ void gnc_header_request_redraw (GncHeader *header); void gnc_header_set_header_rows (GncHeader *header, int num_phys_rows); - +/** @} */ #endif /* GNUCASH_HEADER_H */ - diff --git a/src/register/register-gnome/gnucash-item-edit.h b/src/register/register-gnome/gnucash-item-edit.h index 3439bdae7b..4c310ff532 100644 --- a/src/register/register-gnome/gnucash-item-edit.h +++ b/src/register/register-gnome/gnucash-item-edit.h @@ -25,7 +25,13 @@ #include "gnucash-date-picker.h" #include "gnucash-item-list.h" #include "gnucash-sheet.h" - +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-item-edit.h + * @brief Public declarations for GncItemEdit class + */ #define GNC_TYPE_ITEM_EDIT (gnc_item_edit_get_type ()) #define GNC_ITEM_EDIT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GNC_TYPE_ITEM_EDIT, GncItemEdit)) #define GNC_ITEM_EDIT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_ITEM_EDIT, GncItemEditClass)) @@ -154,7 +160,5 @@ void gnc_item_edit_focus_in (GncItemEdit *item_edit); void gnc_item_edit_focus_out (GncItemEdit *item_edit); void gnc_item_edit_reset_offset (GncItemEdit *item_edit); - +/** @} */ #endif /* GNUCASH_ITEM_EDIT_H */ - - diff --git a/src/register/register-gnome/gnucash-item-list.h b/src/register/register-gnome/gnucash-item-list.h index cae23a13d4..d14fb8d345 100644 --- a/src/register/register-gnome/gnucash-item-list.h +++ b/src/register/register-gnome/gnucash-item-list.h @@ -24,7 +24,13 @@ #define GNUCASH_ITEM_LIST_H #include - +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-item-list.h + * @brief Public Declarations for GncItemList class + */ #define GNC_TYPE_ITEM_LIST (gnc_item_list_get_type ()) #define GNC_ITEM_LIST(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GNC_TYPE_ITEM_LIST, GncItemList)) #define GNC_ITEM_LIST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_ITEM_LIST, GncItemListClass)) @@ -79,7 +85,5 @@ void gnc_item_list_show_selected (GncItemList *item_list); int gnc_item_list_autosize (GncItemList *item_list); - +/** @} */ #endif /* GNUCASH_ITEM_LIST_H */ - - diff --git a/src/register/register-gnome/gnucash-scrolled-window.h b/src/register/register-gnome/gnucash-scrolled-window.h index f578096f06..6426f35947 100644 --- a/src/register/register-gnome/gnucash-scrolled-window.h +++ b/src/register/register-gnome/gnucash-scrolled-window.h @@ -25,7 +25,14 @@ #define GNC_SCROLLED_WINDOW_H #include - +/** @ingroup Register + * @addtogroup Gnome + * @{ + * @brief Gtk+-2 widgets for displaying SplitRegister components. + */ +/** @file gnucash-scrolled-window.h + * @brief Public declarations for GncScrolledWindow class + */ G_BEGIN_DECLS #define GNC_TYPE_SCROLLED_WINDOW (gnc_scrolled_window_get_type ()) @@ -50,5 +57,5 @@ GType gnc_scrolled_window_get_type (void); GtkWidget *gnc_scrolled_window_new (void); G_END_DECLS - +/** @} */ #endif /* GNC_SCROLLED_WINDOW_H */ diff --git a/src/register/register-gnome/gnucash-sheet.h b/src/register/register-gnome/gnucash-sheet.h index aed092a541..4eea17e2f7 100644 --- a/src/register/register-gnome/gnucash-sheet.h +++ b/src/register/register-gnome/gnucash-sheet.h @@ -25,6 +25,13 @@ #include #include "split-register-model.h" #include "table-allgui.h" +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-sheet.h + * @brief Public declarations of GnucashSheet class. + */ #define CELL_VPADDING 2 #define CELL_HPADDING 5 @@ -51,13 +58,13 @@ typedef struct _GnucashRegisterClass GnucashRegisterClass; typedef struct { - /* The style for this block */ + /** The style for this block */ SheetBlockStyle *style; - gint origin_x; /* x origin of block */ - gint origin_y; /* y origin of block */ + gint origin_x; /** x origin of block */ + gint origin_y; /** y origin of block */ - gboolean visible; /* is block visible */ + gboolean visible; /** is block visible */ } SheetBlock; @@ -70,7 +77,7 @@ void gnucash_sheet_recompute_block_offsets (GnucashSheet *sheet); GType gnucash_register_get_type (void); -/* this already has scrollbars attached */ +/** this already has scrollbars attached */ GtkWidget *gnucash_register_new (Table *table); SheetBlock *gnucash_sheet_get_block (GnucashSheet *sheet, @@ -140,6 +147,5 @@ void gnucash_register_set_moved_cb (GnucashRegister *reg, GnucashSheet *gnucash_register_get_sheet (GnucashRegister *reg); GdkColor *get_gtkrc_color (GnucashSheet *sheet, RegisterColor field_type); - +/** @} */ #endif - diff --git a/src/register/register-gnome/gnucash-sheetP.h b/src/register/register-gnome/gnucash-sheetP.h index 6b64f6e104..b7b30bd216 100644 --- a/src/register/register-gnome/gnucash-sheetP.h +++ b/src/register/register-gnome/gnucash-sheetP.h @@ -26,8 +26,13 @@ #include "gnucash-item-edit.h" #include - -/** Type Definitions ***************************************************/ +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-sheetP.h + * @brief Private declarations for GnucashSheet class. + */ struct _GnucashSheet { @@ -101,11 +106,11 @@ struct _GnucashSheet /* IMContext */ GtkIMContext *im_context; - gint preedit_length; /* num of bytes */ - gint preedit_char_length; /* num of chars in UTF-8 */ - gint preedit_start_position; /* save preedit start position * + gint preedit_length; /** num of bytes */ + gint preedit_char_length; /** num of chars in UTF-8 */ + gint preedit_start_position; /** save preedit start position * * combined with selection start */ - gint preedit_cursor_position; /* save preedit cursor position */ + gint preedit_cursor_position; /** save preedit cursor position */ gint preedit_selection_length; PangoAttrList *preedit_attrs; gboolean need_im_reset; @@ -149,12 +154,10 @@ struct _GnucashRegisterClass }; -/** Accessor functions *************************************************/ - GncItemEdit *gnucash_sheet_get_item_edit (GnucashSheet *sheet); //Table *gnucash_sheet_get_table (GnucashSheet *sheet); //gint gnucash_sheet_get_num_virt_rows (GnucashSheet *sheet); //gint gnucash_sheet_get_num_virt_cols (GnucashSheet *sheet); +/** @} */ #endif - diff --git a/src/register/register-gnome/gnucash-style.h b/src/register/register-gnome/gnucash-style.h index 71e134452b..8b143c24e9 100644 --- a/src/register/register-gnome/gnucash-style.h +++ b/src/register/register-gnome/gnucash-style.h @@ -22,7 +22,13 @@ #define GNUCASH_STYLE_H #include "gnucash-sheet.h" - +/** @ingroup Register + * @addtogroup Gnome + * @{ + */ +/** @file gnucash-style.h + * @brief Styling functions for RegisterGnome. + */ typedef struct { gint pixel_height; @@ -123,7 +129,5 @@ void gnucash_sheet_get_header_widths (GnucashSheet *sheet, GNCHeaderWidths widths); void gnucash_sheet_set_header_widths (GnucashSheet *sheet, GNCHeaderWidths widths); - +/** @} */ #endif - -