mirror of https://github.com/Gnucash/gnucash
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
10 KiB
223 lines
10 KiB
/********************************************************************\
|
|
* SplitLedger.h -- split ledger api *
|
|
* Copyright (C) 1998-2000 Linas Vepstas *
|
|
* *
|
|
* 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 *
|
|
* 59 Temple Place - Suite 330 Fax: +1-617-542-2652 *
|
|
* Boston, MA 02111-1307, USA gnu@gnu.org *
|
|
* *
|
|
\********************************************************************/
|
|
|
|
#ifndef __XACC_SPLIT_LEDGER_H__
|
|
#define __XACC_SPLIT_LEDGER_H__
|
|
|
|
#include <glib.h>
|
|
|
|
#include "Group.h"
|
|
#include "Transaction.h"
|
|
#include "gnc-common.h"
|
|
#include "splitreg.h"
|
|
|
|
|
|
/* Datatypes */
|
|
typedef struct _SplitRegisterColors SplitRegisterColors;
|
|
|
|
struct _SplitRegisterColors
|
|
{
|
|
guint32 header_bg_color;
|
|
|
|
guint32 primary_bg_color;
|
|
guint32 secondary_bg_color;
|
|
|
|
guint32 primary_active_bg_color;
|
|
guint32 secondary_active_bg_color;
|
|
|
|
guint32 split_bg_color;
|
|
guint32 split_active_bg_color;
|
|
|
|
gboolean double_alternate_virt;
|
|
};
|
|
|
|
|
|
/* Callback function type */
|
|
typedef gncUIWidget (*SRGetParentCallback) (gpointer user_data);
|
|
typedef void (*SRSetHelpCallback) (gpointer user_data, const char *help_str);
|
|
typedef gboolean (*SRReverseBalanceCallback) (Account *account);
|
|
|
|
|
|
/* The xaccSRSetData() method sets the user data and callback
|
|
* hooks for the register. */
|
|
void xaccSRSetData(SplitRegister *reg, gpointer user_data,
|
|
SRGetParentCallback get_parent,
|
|
SRSetHelpCallback set_help);
|
|
|
|
/* The xaccSRSetAccountSeparator() method sets the character
|
|
* used to separate accounts in fully-qualified names. */
|
|
void xaccSRSetAccountSeparator(char separator);
|
|
|
|
/* The xaccSRSetReverseBalanceCallback() method sets up
|
|
* a callback used to determine whether split balances
|
|
* should be reversed. */
|
|
void xaccSRSetReverseBalanceCallback(SRReverseBalanceCallback callback);
|
|
|
|
/* The xaccSRGetCurrentTrans() method returns the transaction
|
|
* which is the parent of the current split (see below). */
|
|
Transaction * xaccSRGetCurrentTrans (SplitRegister *reg);
|
|
|
|
/* The xaccSRGetCurrentSplit() method returns the split at which
|
|
* the cursor is currently located. */
|
|
Split * xaccSRGetCurrentSplit (SplitRegister *reg);
|
|
|
|
/* The xaccSRGetBlankSplit() method returns the blank split or
|
|
* NULL if there is none. */
|
|
Split * xaccSRGetBlankSplit (SplitRegister *reg);
|
|
|
|
/* The xaccSRGetSplitVirtLoc() method searches the split register
|
|
* for the given split. If found, it returns TRUE and vcell_loc
|
|
* is set to the location of the split. Otherwise, the method
|
|
* returns FALSE. */
|
|
gboolean xaccSRGetSplitVirtLoc (SplitRegister *reg, Split *split,
|
|
VirtualCellLocation *vcell_loc);
|
|
|
|
/* The xaccSRGetSplitAmountVirtLoc() method searches the split
|
|
* register for the given split. If found, it returns TRUE and
|
|
* virt_loc is set to the location of either the debit or credit
|
|
* column in the split, whichever one is non-blank. Otherwise,
|
|
* the method returns FALSE. */
|
|
gboolean xaccSRGetSplitAmountVirtLoc (SplitRegister *reg, Split *split,
|
|
VirtualLocation *virt_loc);
|
|
|
|
/* The xaccSRDuplicateCurrent() method duplicates either the current
|
|
* transaction or the current split depending on the register mode
|
|
* and cursor position. Returns the split just created, or the
|
|
* 'main' split of the transaction just created, or NULL if
|
|
* nothing happened. */
|
|
Split * xaccSRDuplicateCurrent (SplitRegister *reg);
|
|
|
|
/* The xaccSRCopyCurrent() method makes a copy of the current entity,
|
|
* either a split or a transaction, so that it can be pasted later. */
|
|
void xaccSRCopyCurrent (SplitRegister *reg);
|
|
|
|
/* The xaccSRCutCurrent() method is equivalent to copying the current
|
|
* entity and the deleting it with the approriate delete method. */
|
|
void xaccSRCutCurrent (SplitRegister *reg);
|
|
|
|
/* The xaccSRPasteCurrent() method pastes a previous copied entity
|
|
* onto the current entity, but only if the copied entity and the
|
|
* current entity are of the same type. */
|
|
void xaccSRPasteCurrent (SplitRegister *reg);
|
|
|
|
/* The xaccSRDeleteCurrentSplit() method deletes the split associated
|
|
* with the current cursor, if both are non-NULL. If successful, all
|
|
* affected account windows are refreshed. Deleting the blank split
|
|
* just clears the cursor values. */
|
|
void xaccSRDeleteCurrentSplit (SplitRegister *reg);
|
|
|
|
/* The xaccSRDeleteCurrentTrans() method deletes the transaction
|
|
* associated with the current cursor, if both are non-NULL.
|
|
* If successful, all affected account windows are refreshed. */
|
|
void xaccSRDeleteCurrentTrans (SplitRegister *reg);
|
|
|
|
/* The xaccSREmptyCurrentTrans() method deletes the non-transaction
|
|
* splits associated wih the current cursor, if both are non-NULL.
|
|
* If successful, all affected account windows are refreshed. */
|
|
void xaccSREmptyCurrentTrans (SplitRegister *reg);
|
|
|
|
/* The xaccSRCancelCursorSplitChanges() method cancels any changes made
|
|
* to the current cursor, reloads the cursor from the engine, reloads
|
|
* the table from the cursor, and updates the GUI. The change flags
|
|
* are cleared. */
|
|
void xaccSRCancelCursorSplitChanges (SplitRegister *reg);
|
|
|
|
/* The xaccSRCancelCursorTransChanges() method cancels any changes made
|
|
* to the current pending transaction, reloads the table from the engine,
|
|
* and updates the GUI. The change flags are cleared. */
|
|
void xaccSRCancelCursorTransChanges (SplitRegister *reg);
|
|
|
|
/* The xaccSRLoadRegister() subroutine will copy transaction
|
|
* information from a list of splits to the rows of the
|
|
* register GUI. The third argument, default_source_acc,
|
|
* will be used to initialize the source account of a new,
|
|
* blank split appended to the tail end of the register.
|
|
* This "blank split" is the place where the user can
|
|
* edit info to create new tranasactions. */
|
|
void xaccSRLoadRegister (SplitRegister *reg, GList * slist,
|
|
Account *default_source_acc);
|
|
|
|
/* The xaccSRSaveRegEntry() method will copy the contents
|
|
* from the cursor to a split. The split/transaction
|
|
* that is updated is the one associated with the current
|
|
* cursor (register entry) position. If the do_commit flag
|
|
* is set, the transaction will also be committed. If it is
|
|
* the blank transaction, and the do_commit flag is set,
|
|
* a refresh will result in a new blank transaction.
|
|
* The method returns TRUE if something was changed. */
|
|
gboolean xaccSRSaveRegEntry (SplitRegister *reg, gboolean do_commit);
|
|
|
|
/* The xaccSRRedrawReg() method should be called soon
|
|
* after the xaccSRSaveRegEntry() method. It checks the
|
|
* change flag for the current entry/split, and if it
|
|
* has been modified, it causes a redraw of any register
|
|
* window that could be affected. That is, it causes
|
|
* a redraw of any window showing this split, or any
|
|
* other split that belongs to this same tansaction. */
|
|
void xaccSRRedrawReg (SplitRegister *reg);
|
|
|
|
/* The xaccSRHasPendingChanges() method returns TRUE if the register
|
|
* has changed cells that have not been committed. */
|
|
gboolean xaccSRHasPendingChanges (SplitRegister *reg);
|
|
|
|
/* If TRUE, visually indicate the demarcation between splits with post
|
|
* dates prior to the present, and after. This will only make sense if
|
|
* the splits are ordered primarily by post date. */
|
|
void xaccSRShowPresentDivider (SplitRegister *reg, gboolean show_present);
|
|
|
|
/* Set the colors used by SplitRegisters */
|
|
void xaccSetSplitRegisterColors (SplitRegisterColors reg_colors);
|
|
|
|
/* If use_red is TRUE, negative amounts will be printed in red. */
|
|
void xaccSetSplitRegisterColorizeNegative (gboolean use_red);
|
|
|
|
/* Expand the current transaction if it is collapsed. */
|
|
void xaccSRExpandCurrentTrans (SplitRegister *reg, gboolean expand);
|
|
|
|
/* Return TRUE if current trans is expanded and style is REG_STYLE_LEDGER. */
|
|
gboolean xaccSRCurrentTransExpanded (SplitRegister *reg);
|
|
|
|
/* Private functions, for MultiLedger.c only */
|
|
gboolean xaccSRFullRefreshOK (SplitRegister *reg);
|
|
void xaccSRLoadXferCells (SplitRegister *reg, Account *base_account);
|
|
|
|
const char * xaccSRGetEntryHandler (VirtualLocation virt_loc,
|
|
gboolean *changed,
|
|
gpointer user_data);
|
|
const char * xaccSRGetLabelHandler (VirtualLocation virt_loc,
|
|
gpointer user_data);
|
|
CellIOFlags xaccSRGetIOFlagsHandler (VirtualLocation virt_loc,
|
|
gpointer user_data);
|
|
guint32 xaccSRGetFGColorHandler (VirtualLocation virt_loc,
|
|
gpointer user_data);
|
|
guint32 xaccSRGetBGColorHandler (VirtualLocation virt_loc,
|
|
gboolean *hatching,
|
|
gpointer user_data);
|
|
void xaccSRGetCellBorderHandler (VirtualLocation virt_loc,
|
|
PhysicalCellBorders *borders,
|
|
gpointer user_data);
|
|
gboolean xaccSRConfirmHandler (VirtualLocation virt_loc,
|
|
gpointer user_data);
|
|
|
|
#endif /* __XACC_SPLIT_LEDGER_H__ */
|