GnuCash  5.6-150-g038405b370+
gnc-split-reg.h
1 /********************************************************************\
2  * gnc-split-reg.h -- A widget for the common register look-n-feel. *
3  * Copyright (C) 1997 Robin D. Clark *
4  * Copyright (C) 1997-1998 Linas Vepstas <linas@linas.org> *
5  * Copyright (C) 1998 Rob Browning <rlb@cs.utexas.edu> *
6  * Copyright (C) 1999-2000 Dave Peticolas <dave@krondo.com> *
7  * Copyright (C) 2001 Gnumatic, Inc. *
8  * Copyright (C) 2002,2006 Joshua Sled <jsled@asynchronous.org> *
9  * *
10  * This program is free software; you can redistribute it and/or *
11  * modify it under the terms of the GNU General Public License as *
12  * published by the Free Software Foundation; either version 2 of *
13  * the License, or (at your option) any later version. *
14  * *
15  * This program is distributed in the hope that it will be useful, *
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18  * GNU General Public License for more details. *
19  * *
20  * You should have received a copy of the GNU General Public License*
21  * along with this program; if not, contact: *
22  * *
23  * Free Software Foundation Voice: +1-617-542-5942 *
24  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
25  * Boston, MA 02110-1301, USA gnu@gnu.org *
26 \********************************************************************/
27 
28 
29 #ifndef GNC_SPLIT_REG_H
30 #define GNC_SPLIT_REG_H
31 
32 #include "gnc-ledger-display.h"
33 #include "gnucash-register.h"
34 
35 #ifdef __cplusplus
36 extern "C"
37 {
38 #endif
39 
40 #define GNC_SPLIT_REG(obj) G_TYPE_CHECK_INSTANCE_CAST( obj, gnc_split_reg_get_type(), GNCSplitReg )
41 #define GNC_SPLIT_REG_CLASS(klass) G_TYPE_CHECK_CLASS_CAST( klass, gnc_split_reg_get_type(), GNCSplitRegClass )
42 #define IS_GNC_SPLIT_REG(obj) G_TYPE_CHECK_INSTANCE_TYPE( obj, gnc_split_reg_get_type() )
43 
44 #define STATE_SECTION_REG_PREFIX "Register"
45 #define KEY_PAGE_SORT "register_order"
46 #define KEY_PAGE_SORT_REV "register_reversed"
47 #define KEY_PAGE_FILTER "register_filter"
48 
49 typedef struct _GNCSplitReg GNCSplitReg;
50 typedef struct _GNCSplitRegClass GNCSplitRegClass;
51 
53 {
54  /* The "parent" widget. */
55  GtkBox vbox;
56 
57  /* The containing window. */
58  GtkWidget *window;
59  gint width;
60  gint height;
61 
62  GtkWidget *toolbar;
63  GtkWidget *summarybar;
64 
65  GtkWidget *popup_menu;
66 
67  GtkWidget *edit_menu;
68  GtkWidget *view_menu;
69  GtkWidget *style_submenu;
70  GtkWidget *sort_submenu;
71  GtkWidget *action_menu;
72 
73  GtkWidget * double_line_check;
74 
75  GtkWidget *split_button;
76  GtkWidget *split_menu_check;
77  GtkWidget *split_popup_check;
78 
79  /* Summary Bar Labels */
80  GtkWidget *balance_label;
81  GtkWidget *cleared_label;
82  GtkWidget *reconciled_label;
83  GtkWidget *future_label;
84  GtkWidget *projectedminimum_label;
85  GtkWidget *shares_label;
86  GtkWidget *value_label;
87  GtkWidget *sort_label;
88  GtkWidget *sort_arrow;
89  GtkWidget *filter_label;
90 
92  GNCLedgerDisplay *ledger;
94  GnucashRegister *reg;
95 
96  gint numRows;
97 
98  guint sort_type;
99  gboolean sort_rev;
100  gulong sort_arrow_handler_id;
101  gchar *filter_text;
102 
103  gboolean read_only;
104 };
105 
107 {
108  GtkBoxClass parent_class;
109 
110  /* Signal defaults */
111  void (*enter_ent_cb) ( GNCSplitReg *w, gpointer user_data );
112  void (*cancel_ent_cb) ( GNCSplitReg *w, gpointer user_data );
113  void (*delete_ent_cb) ( GNCSplitReg *w, gpointer user_data );
114  void (*reinit_ent_cb) ( GNCSplitReg *w, gpointer user_data );
115  void (*dup_ent_cb) ( GNCSplitReg *w, gpointer user_data );
116  void (*schedule_ent_cb) ( GNCSplitReg *w, gpointer user_data );
117  void (*expand_ent_cb) ( GNCSplitReg *w, gpointer user_data );
118  void (*blank_cb) ( GNCSplitReg *w, gpointer user_data );
119  void (*jump_cb) ( GNCSplitReg *w, gpointer user_data );
120  void (*cut_cb) ( GNCSplitReg *w, gpointer user_data );
121  void (*cut_txn_cb) ( GNCSplitReg *w, gpointer user_data );
122  void (*copy_cb) ( GNCSplitReg *w, gpointer user_data );
123  void (*copy_txn_cb) ( GNCSplitReg *w, gpointer user_data );
124  void (*paste_cb) ( GNCSplitReg *w, gpointer user_data );
125  void (*paste_txn_cb) ( GNCSplitReg *w, gpointer user_data );
126  void (*void_txn_cb) ( GNCSplitReg *w, gpointer user_data );
127  void (*unvoid_txn_cb) ( GNCSplitReg *w, gpointer user_data );
128  void (*reverse_txn_cb) ( GNCSplitReg *w, gpointer user_data );
129  void (*help_changed_cb) ( GNCSplitReg *w, gpointer user_data );
130  void (*show_popup_menu_cb) ( GNCSplitReg *w, gpointer user_data );
131 };
132 /* Something somewhere sets these to silly values and causes problems */
133 #undef DELETE
134 #undef DUPLICATE
135 typedef enum
136 {
137  ENTER,
138  CANCEL,
139  DELETE,
140  REINIT,
141  DUPLICATE,
142  SCHEDULE,
143  SPLIT,
144  BLANK,
145  JUMP,
146  CUT,
147  CUT_TXN,
148  COPY,
149  COPY_TXN,
150  PASTE,
151  PASTE_TXN,
152  SORT_ORDER_SUBMENU,
153  STYLE_SUBMENU,
154 } GNC_SPLIT_REG_ITEM;
155 
156 /* Easy way to pass the sort-type
157  * Note that this is STUPID -- we should be using parameter lists,
158  * but this provides a simple case statement internally. This should
159  * probably not actually be exposed in the external interface....
160  */
161 #define ENUM_LIST_SORTTYPE(_) \
162  _(BY_NONE,) \
163  _(BY_STANDARD,) \
164  _(BY_DATE,) \
165  _(BY_DATE_ENTERED,) \
166  _(BY_DATE_RECONCILED,) \
167  _(BY_NUM,) \
168  _(BY_AMOUNT,) \
169  _(BY_MEMO,) \
170  _(BY_DESC,) \
171  _(BY_ACTION,) \
172  _(BY_NOTES,)
173 
174 DEFINE_ENUM(SortType, ENUM_LIST_SORTTYPE)
175 AS_STRING_DEC(SortType, ENUM_LIST_SORTTYPE)
176 FROM_STRING_DEC(SortType, ENUM_LIST_SORTTYPE)
177 
178 
181 GType gnc_split_reg_get_type(void);
182 
190 GtkWidget* gnc_split_reg_new( GNCLedgerDisplay *ld,
191  GtkWindow *parent,
192  gint numberOfLines,
193  gboolean read_only );
194 
198 GnucashRegister *gnc_split_reg_get_register( GNCSplitReg *gsr );
199 
203 GtkWidget *gsr_create_summary_bar( GNCSplitReg *gsr );
204 
209 SortType gnc_split_reg_get_sort_type( GNCSplitReg *gsr );
210 void gnc_split_reg_set_sort_type( GNCSplitReg *gsr, SortType t );
211 void gnc_split_reg_set_sort_type_force( GNCSplitReg *gsr, SortType t, gboolean force);
212 
216 void gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr,
217  gboolean rev, gboolean refresh);
218 
219 
223 void gnc_split_reg_change_style (GNCSplitReg *gsr,
224  SplitRegisterStyle style, gboolean refresh);
225 
229 GtkWidget *gnc_split_reg_get_summarybar( GNCSplitReg *gsr );
230 
235 void gnc_split_reg_set_split_state( GNCSplitReg *gsr, gboolean split );
236 void gnc_split_reg_set_double_line( GNCSplitReg *gsr, gboolean doubleLine );
237 
238 void gnc_split_reg_raise( GNCSplitReg *gsr );
239 
245 gboolean gnc_split_reg_get_read_only( GNCSplitReg *gsr );
246 
247 /*
248  * Function to jump to various places in the register
249  */
250 void gnc_split_reg_jump_to_blank (GNCSplitReg *gsr);
251 void gnc_split_reg_jump_to_split(GNCSplitReg *gsr, Split *split);
252 void gnc_split_reg_jump_to_split_amount(GNCSplitReg *gsr, Split *split);
253 
263 gboolean gnc_split_reg_clear_filter_for_split (GNCSplitReg *gsr, Split *split);
264 
268 void gnc_split_reg_focus_on_sheet (GNCSplitReg *gsr);
269 void gnc_split_reg_set_sheet_focus (GNCSplitReg *gsr, gboolean has_focus);
270 
271 /*
272  * Create a transaction entry with given amount and date. One account is
273  * specified, the other is undefined i.e. it defaults to orphan account.
274  * Jump to the transaction entry in the register.
275  * The purpose of this function to create an adjustment entry from the reconcile
276  * window.
277  */
278 void gnc_split_reg_balancing_entry (GNCSplitReg *gsr, Account *account,
279  time64 statement_date, gnc_numeric balancing_amount);
280 
285 void gsr_default_doclink_handler (GNCSplitReg *gsr);
286 
291 void gsr_default_doclink_open_handler (GNCSplitReg *gsr);
292 
297 void gsr_default_doclink_remove_handler (GNCSplitReg *gsr);
298 
299 void gnc_split_reg_enter( GNCSplitReg *gsr, gboolean next_transaction );
300 void gsr_default_delete_handler( GNCSplitReg *gsr, gpointer data );
301 void gsr_default_cut_txn_handler( GNCSplitReg *gsr, gpointer data );
302 void gsr_default_reinit_handler( GNCSplitReg *gsr, gpointer data );
303 void gsr_default_expand_handler( GNCSplitReg *gsr, gpointer data );
304 void gsr_default_schedule_handler( GNCSplitReg *gsr, gpointer data );
305 
312 gchar *gsr_get_register_state_section (GNCSplitReg *gsr);
313 
314 void gnc_split_reg_set_moved_cb( GNCSplitReg *gsr, GFunc cb, gpointer cb_data );
315 
316 #ifdef __cplusplus
317 }
318 #endif
319 
320 #endif /* GNC_SPLIT_REG_H */
Public declarations for GncLedgerDisplay class.
STRUCTS.
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
GnucashRegister * reg
The actual gnucash register widget.
Definition: gnc-split-reg.h:94
GNCLedgerDisplay * ledger
The current ledger display.
Definition: gnc-split-reg.h:92
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition: gnc-date.h:87
FROM_STRING_DEC(CheckItemType, ENUM_CHECK_ITEM_TYPE)
SplitRegisterStyle
Register styles.