GnuCash 2.4.99
split-register.h
Go to the documentation of this file.
00001 /********************************************************************\
00002  * split-register.h -- split register API                           *
00003  *                                                                  *
00004  * This program is free software; you can redistribute it and/or    *
00005  * modify it under the terms of the GNU General Public License as   *
00006  * published by the Free Software Foundation; either version 2 of   *
00007  * the License, or (at your option) any later version.              *
00008  *                                                                  *
00009  * This program is distributed in the hope that it will be useful,  *
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
00012  * GNU General Public License for more details.                     *
00013  *                                                                  *
00014  * You should have received a copy of the GNU General Public License*
00015  * along with this program; if not, contact:                        *
00016  *                                                                  *
00017  * Free Software Foundation           Voice:  +1-617-542-5942       *
00018  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
00019  * Boston, MA  02110-1301,  USA       gnu@gnu.org                   *
00020  *                                                                  *
00021 \********************************************************************/
00140 #ifndef SPLIT_REGISTER_H
00141 #define SPLIT_REGISTER_H
00142 
00143 #include <glib.h>
00144 
00145 #include "Transaction.h"
00146 #include "table-allgui.h"
00147 
00152 typedef enum
00153 {
00154     BANK_REGISTER,
00155     CASH_REGISTER,
00156     ASSET_REGISTER,
00157     CREDIT_REGISTER,
00158     LIABILITY_REGISTER,
00159     INCOME_REGISTER,
00160     EXPENSE_REGISTER,
00161     EQUITY_REGISTER,
00162     STOCK_REGISTER,
00163     CURRENCY_REGISTER,
00164     RECEIVABLE_REGISTER,
00165     PAYABLE_REGISTER,
00166     TRADING_REGISTER,
00167     NUM_SINGLE_REGISTER_TYPES,
00168 
00169     GENERAL_LEDGER = NUM_SINGLE_REGISTER_TYPES,
00170     INCOME_LEDGER,
00171     PORTFOLIO_LEDGER,
00172     SEARCH_LEDGER,
00173 
00174     NUM_REGISTER_TYPES
00175 } SplitRegisterType;
00176 
00178 typedef enum
00179 {
00180     REG_STYLE_LEDGER,
00181     REG_STYLE_AUTO_LEDGER,
00182     REG_STYLE_JOURNAL
00183 } SplitRegisterStyle;
00184 
00189 #define ACTN_CELL  "action"
00190 #define BALN_CELL  "balance"
00191 #define CRED_CELL  "credit"
00192 #define DATE_CELL  "date"
00193 #define DDUE_CELL  "date-due"
00194 #define DEBT_CELL  "debit"
00195 #define DESC_CELL  "description"
00196 #define FCRED_CELL "credit-formula"
00197 #define FDEBT_CELL "debit-formula"
00198 #define MEMO_CELL  "memo"
00199 #define MXFRM_CELL "transfer"
00200 #define NOTES_CELL "notes"
00201 #define NUM_CELL   "num"
00202 #define PRIC_CELL  "price"
00203 #define RATE_CELL  "exchrate"
00204 #define RECN_CELL  "reconcile"
00205 #define SHRS_CELL  "shares"
00206 #define TBALN_CELL "trans-balance"
00207 #define TCRED_CELL "trans-credit"
00208 #define TDEBT_CELL "trans-debit"
00209 #define TSHRS_CELL "trans-shares"
00210 #define TYPE_CELL  "split-type"
00211 #define XFRM_CELL  "account"
00212 #define VNOTES_CELL "void-notes"
00213 #define RBALN_CELL "reg-run-balance"
00214 
00219 #define CURSOR_SINGLE_LEDGER  "cursor-single-ledger"
00220 #define CURSOR_DOUBLE_LEDGER  "cursor-double-ledger"
00221 #define CURSOR_SINGLE_JOURNAL "cursor-single-journal"
00222 #define CURSOR_DOUBLE_JOURNAL "cursor-double-journal"
00223 #define CURSOR_SPLIT          "cursor-split"
00224 
00228 typedef enum
00229 {
00230     CURSOR_CLASS_NONE = -1,
00231     CURSOR_CLASS_SPLIT,
00232     CURSOR_CLASS_TRANS,
00233     NUM_CURSOR_CLASSES
00234 } CursorClass;
00235 
00236 typedef struct split_register_colors
00237 {
00238     guint32 header_bg_color;
00239 
00240     guint32 primary_bg_color;
00241     guint32 secondary_bg_color;
00242 
00243     guint32 primary_active_bg_color;
00244     guint32 secondary_active_bg_color;
00245 
00246     guint32 split_bg_color;
00247     guint32 split_active_bg_color;
00248 } SplitRegisterColors;
00249 
00250 
00252 typedef struct split_register SplitRegister;
00253 typedef struct sr_info SRInfo;
00254 
00256 struct split_register
00257 {
00258     Table * table;   
00260     SplitRegisterType type;
00261     SplitRegisterStyle style;
00262 
00263     gboolean use_double_line;  
00264     gboolean is_template;
00265     gboolean do_auto_complete; 
00267     SRInfo * sr_info;   
00268 };
00269 
00271 typedef GtkWidget *(*SRGetParentCallback) (gpointer user_data);
00272 
00273 
00274 /* Prototypes ******************************************************/
00275 
00289 SplitRegister * gnc_split_register_new (SplitRegisterType type,
00290                                         SplitRegisterStyle style,
00291                                         gboolean use_double_line,
00292                                         gboolean is_template);
00293 
00298 void gnc_split_register_destroy (SplitRegister *reg);
00299 
00311 void gnc_split_register_config (SplitRegister *reg,
00312                                 SplitRegisterType type,
00313                                 SplitRegisterStyle style,
00314                                 gboolean use_double_line);
00315 
00322 void gnc_split_register_set_auto_complete(SplitRegister *reg,
00323         gboolean do_auto_complete);
00324 
00331 void gnc_split_register_set_read_only (SplitRegister *reg, gboolean read_only);
00332 
00333 
00340 void gnc_split_register_set_template_account (SplitRegister *reg,
00341         Account *template_account);
00342 
00344 void gnc_split_register_set_data (SplitRegister *reg, gpointer user_data,
00345                                   SRGetParentCallback get_parent);
00346 
00353 CursorClass gnc_split_register_get_current_cursor_class (SplitRegister *reg);
00354 
00363 CursorClass gnc_split_register_get_cursor_class
00364 (SplitRegister *reg,
00365  VirtualCellLocation vcell_loc);
00366 
00374 Transaction * gnc_split_register_get_current_trans (SplitRegister *reg);
00375 
00386 Split *
00387 gnc_split_register_get_current_trans_split (SplitRegister *reg,
00388         VirtualCellLocation *vcell_loc);
00389 
00397 Split * gnc_split_register_get_current_split (SplitRegister *reg);
00398 
00406 Split * gnc_split_register_get_blank_split (SplitRegister *reg);
00407 
00422 gboolean
00423 gnc_split_register_get_split_virt_loc (SplitRegister *reg, Split *split,
00424                                        VirtualCellLocation *vcell_loc);
00425 
00438 gboolean
00439 gnc_split_register_get_split_amount_virt_loc (SplitRegister *reg, Split *split,
00440         VirtualLocation *virt_loc);
00441 
00446 Split * gnc_split_register_duplicate_current (SplitRegister *reg);
00447 
00450 void gnc_split_register_copy_current (SplitRegister *reg);
00451 
00454 void gnc_split_register_cut_current (SplitRegister *reg);
00455 
00458 void gnc_split_register_paste_current (SplitRegister *reg);
00459 
00462 void gnc_split_register_delete_current_split (SplitRegister *reg);
00463 
00466 void gnc_split_register_delete_current_trans (SplitRegister *reg);
00467 
00470 void gnc_split_register_void_current_trans (SplitRegister *reg,
00471         const char *reason);
00472 
00475 void gnc_split_register_unvoid_current_trans (SplitRegister *reg);
00476 
00479 void gnc_split_register_empty_current_trans_except_split  (SplitRegister *reg, Split *split);
00480 void gnc_split_register_empty_current_trans  (SplitRegister *reg);
00481 
00485 void gnc_split_register_cancel_cursor_split_changes (SplitRegister *reg);
00486 
00490 void gnc_split_register_cancel_cursor_trans_changes (SplitRegister *reg);
00491 
00509 void gnc_split_register_load (SplitRegister *reg, GList * slist,
00510                               Account *default_account);
00511 
00519 gboolean gnc_split_register_save (SplitRegister *reg, gboolean do_commit);
00520 
00522 void gnc_split_register_redraw (SplitRegister *reg);
00523 
00525 gboolean gnc_split_register_changed (SplitRegister *reg);
00526 
00530 void gnc_split_register_show_present_divider (SplitRegister *reg,
00531         gboolean show_present);
00532 
00534 void gnc_split_register_expand_current_trans (SplitRegister *reg,
00535         gboolean expand);
00536 
00538 void gnc_split_register_collapse_current_trans (SplitRegister *reg);
00539 
00541 gboolean gnc_split_register_current_trans_expanded (SplitRegister *reg);
00542 
00544 const char * gnc_split_register_get_debit_string (SplitRegister *reg);
00545 
00547 const char * gnc_split_register_get_credit_string (SplitRegister *reg);
00548 
00549 
00555 gboolean
00556 gnc_split_register_handle_exchange (SplitRegister *reg, gboolean force_dialog);
00557 
00558 /* returns TRUE if begin_edit was aborted */
00559 gboolean
00560 gnc_split_register_begin_edit_or_warn(SRInfo *info, Transaction *trans);
00561 
00566 /* -------------------------------------------------------------- */
00567 
00569 gboolean gnc_split_register_full_refresh_ok (SplitRegister *reg);
00570 
00572 void gnc_copy_trans_onto_trans (Transaction *from, Transaction *to,
00573                                 gboolean use_cut_semantics,
00574                                 gboolean do_commit);
00575 
00576 #endif
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines