GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
gnc-tree-model-split-reg.h
1 /********************************************************************\
2  * gnc-tree-model-split-reg.h -- GtkTreeView implementation to *
3  * display registers in a GtkTreeView. *
4  * *
5  * Copyright (C) 2006-2007 Chris Shoemaker <[email protected]> *
6  * Copyright (C) 2012 Robert Fewell *
7  * *
8  * This program is free software; you can redistribute it and/or *
9  * modify it under the terms of the GNU General Public License as *
10  * published by the Free Software Foundation; either version 2 of *
11  * the License, or (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License*
19  * along with this program; if not, contact: *
20  * *
21  * Free Software Foundation Voice: +1-617-542-5942 *
22  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
23  * Boston, MA 02110-1301, USA [email protected] *
24  * *
25 \********************************************************************/
26 
27 
28 #ifndef __GNC_TREE_MODEL_SPLIT_REG_H
29 #define __GNC_TREE_MODEL_SPLIT_REG_H
30 
31 #include <gtk/gtk.h>
32 #include "gnc-tree-model.h"
33 #include "Query.h"
34 
35 
36 G_BEGIN_DECLS
37 
38 /* type macros */
39 #define GNC_TYPE_TREE_MODEL_SPLIT_REG (gnc_tree_model_split_reg_get_type ())
40 #define GNC_TREE_MODEL_SPLIT_REG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_TREE_MODEL_SPLIT_REG, GncTreeModelSplitReg))
41 #define GNC_TREE_MODEL_SPLIT_REG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_TREE_MODEL_SPLIT_REG, GncTreeModelSplitRegClass))
42 #define GNC_IS_TREE_MODEL_SPLIT_REG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_TREE_MODEL_SPLIT_REG))
43 #define GNC_IS_TREE_MODEL_SPLIT_REG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_TREE_MODEL_SPLIT_REG))
44 #define GNC_TREE_MODEL_SPLIT_REG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_TREE_MODEL_SPLIT_REG, GncTreeModelSplitRegClass))
45 #define GNC_TREE_MODEL_SPLIT_REG_NAME "GncTreeModelSplitReg"
46 
47 
48 /* Define the number of transaction to load */
49 #define NUM_OF_TRANS 30
50 
51 
56 typedef enum
57 {
58  BANK_REGISTER2, //0
59  CASH_REGISTER2, //1
60  ASSET_REGISTER2, //2
61  CREDIT_REGISTER2, //3
62  LIABILITY_REGISTER2, //4
63  INCOME_REGISTER2, //5
64  EXPENSE_REGISTER2, //6
65  EQUITY_REGISTER2, //7
66  STOCK_REGISTER2, //8
67  CURRENCY_REGISTER2, //9
68  RECEIVABLE_REGISTER2, //10
69  PAYABLE_REGISTER2, //11
70  TRADING_REGISTER2, //12
71  NUM_SINGLE_REGISTER_TYPES2, //13
72 
73  GENERAL_LEDGER2 = NUM_SINGLE_REGISTER_TYPES2, //13
74  INCOME_LEDGER2, //14
75  PORTFOLIO_LEDGER2, //15
76  SEARCH_LEDGER2, //16
77 
78  NUM_REGISTER_TYPES2 //17
79 } SplitRegisterType2;
80 
81 
83 typedef enum
84 {
85  REG2_STYLE_LEDGER, //0
86  REG2_STYLE_AUTO_LEDGER, //1
87  REG2_STYLE_JOURNAL //2
88 } SplitRegisterStyle2;
89 
90 
91 typedef enum
92 {
93  GNC_TREE_MODEL_SPLIT_REG_COL_GUID, //0
94  GNC_TREE_MODEL_SPLIT_REG_COL_DATE, //1
95  GNC_TREE_MODEL_SPLIT_REG_COL_DUEDATE, //2
96  GNC_TREE_MODEL_SPLIT_REG_COL_NUMACT, //3
97  GNC_TREE_MODEL_SPLIT_REG_COL_DESCNOTES, //4
98  GNC_TREE_MODEL_SPLIT_REG_COL_TRANSFERVOID, //5
99  GNC_TREE_MODEL_SPLIT_REG_COL_RECN, //6
100  GNC_TREE_MODEL_SPLIT_REG_COL_DEBIT, //7
101  GNC_TREE_MODEL_SPLIT_REG_COL_CREDIT, //8
102 
103  GNC_TREE_MODEL_SPLIT_REG_COL_LAST_VISIBLE = GNC_TREE_MODEL_SPLIT_REG_COL_CREDIT, //8
104 
105  /* internal hidden columns */
106  GNC_TREE_MODEL_SPLIT_REG_COL_RO, //9
107  GNC_TREE_MODEL_SPLIT_REG_COL_NUM_VIS, //10
108  GNC_TREE_MODEL_SPLIT_REG_COL_ACT_VIS, //11
109 
110  GNC_TREE_MODEL_SPLIT_REG_NUM_COLUMNS //12
111 } GncTreeModelSplitRegColumn;
112 
113 
114 
115 typedef enum
116 {
117  VIEW_HOME, //0
118  VIEW_UP, //1
119  VIEW_PGUP, //2
120  VIEW_GOTO, //3
121  VIEW_PGDOWN, //4
122  VIEW_DOWN, //5
123  VIEW_END, //6
124 } GncTreeModelSplitRegUpdate;
125 
126 
127 /* typedefs & structures */
129 
131 typedef struct
132 {
135  gint stamp;
137  SplitRegisterType2 type;
138  SplitRegisterStyle2 style;
139  gboolean use_double_line;
141  gboolean is_template;
143  gint sort_depth;
144  gint sort_col;
145  GtkSortType sort_direction;
148  gboolean separator_changed;
149  gboolean alt_colors_by_txn;
150  gboolean use_theme_colors;
152  gboolean read_only;
155  gint current_row;
160 
161 
163 typedef struct
164 {
167  /* This signal is emitted to refresh the transaction view, the pointer has
168  the transaction */
169  void (*refresh_trans) (GncTreeModelSplitReg *model, gpointer item);
170 
171  /* This signal is emitted to refresh the model */
172  void (*refresh_view) (GncTreeModelSplitReg *model, gpointer user_data);
173 
174  /* This signal is emitted to keep scrollbar in sync */
175  void (*scroll_sync) (GncTreeModelSplitReg *model, gpointer user_data);
176 
177  /* This signal is emitted to refresh the status bar */
178  void (*refresh_status_bar) (GncTreeModelSplitReg *model, gpointer user_data);
179 
180  /* This signal is emitted before a transaction delete, the pointer has
181  the transaction */
182  void (*selection_move_delete) (GncTreeModelSplitReg *model, gpointer item);
183 
185 
186 
188 typedef GtkWidget *(*SRGetParentCallback2) (gpointer user_data);
189 
194 GType gnc_tree_model_split_reg_get_type (void);
195 
198 gnc_tree_model_split_reg_new (SplitRegisterType2 reg_type, SplitRegisterStyle2 style,
199  gboolean use_double_line, gboolean is_template);
200 
202 void gnc_tree_model_split_reg_load (GncTreeModelSplitReg *model, GList * slist, Account *default_account);
203 
205 void gnc_tree_model_split_reg_set_template_account (GncTreeModelSplitReg *model, Account *template_account);
206 
208 Account * gnc_tree_model_split_reg_get_template_account (GncTreeModelSplitReg *model);
209 
211 gboolean gnc_tree_model_split_reg_get_template (GncTreeModelSplitReg *model);
212 
214 void gnc_tree_model_split_reg_destroy (GncTreeModelSplitReg *model);
215 
217 void gnc_tree_model_split_reg_set_data (GncTreeModelSplitReg *model, gpointer user_data,
218  SRGetParentCallback2 get_parent);
219 
221 void gnc_tree_model_split_reg_update_query (GncTreeModelSplitReg *model, Query *query);
222 
224 GtkWidget * gnc_tree_model_split_reg_get_parent (GncTreeModelSplitReg *model);
225 
227 void gnc_tree_model_split_reg_config (GncTreeModelSplitReg *model, SplitRegisterType2 newtype,
228  SplitRegisterStyle2 newstyle, gboolean use_double_line);
229 
231 Account * gnc_tree_model_split_reg_get_anchor (GncTreeModelSplitReg *model);
232 
234 void gnc_tree_model_split_reg_commit_blank_split (GncTreeModelSplitReg *model);
235 
237 void gnc_tree_model_split_reg_set_display (GncTreeModelSplitReg *model, gboolean subacc, gboolean gl);
238 
240 void gnc_tree_model_split_reg_move (GncTreeModelSplitReg *model, GncTreeModelSplitRegUpdate model_update);
241 
242 /* Sync the vertical scrollbar to position in full_tlist. */
243 void gnc_tree_model_split_reg_sync_scrollbar (GncTreeModelSplitReg *model);
244 
246 Transaction * gnc_tree_model_split_reg_get_first_trans (GncTreeModelSplitReg *model);
247 
249 gboolean gnc_tree_model_split_reg_trans_is_in_view (GncTreeModelSplitReg *model, Transaction *trans);
250 
251 /* These are to do with autocompletion */
252 GtkListStore * gnc_tree_model_split_reg_get_description_list (GncTreeModelSplitReg *model);
253 
254 GtkListStore * gnc_tree_model_split_reg_get_notes_list (GncTreeModelSplitReg *model);
255 
256 GtkListStore * gnc_tree_model_split_reg_get_memo_list (GncTreeModelSplitReg *model);
257 
258 GtkListStore * gnc_tree_model_split_reg_get_action_list (GncTreeModelSplitReg *model);
259 
260 GtkListStore * gnc_tree_model_split_reg_get_acct_list (GncTreeModelSplitReg *model);
261 
262 void gnc_tree_model_split_reg_update_num_list (GncTreeModelSplitReg *model);
263 
264 void gnc_tree_model_split_reg_update_action_list (GncTreeModelSplitReg *model);
265 
266 void gnc_tree_model_split_reg_update_account_list (GncTreeModelSplitReg *model);
267 
268 void gnc_tree_model_split_reg_update_completion (GncTreeModelSplitReg *model);
269 
270 
271 /* Get the split and transaction */
272 gboolean gnc_tree_model_split_reg_get_split_and_trans (
273  GncTreeModelSplitReg *model, GtkTreeIter *iter,
274  gboolean *is_trow1, gboolean *is_trow2, gboolean *is_split,
275  gboolean *is_blank, Split **split, Transaction **trans);
276 
277 /* Return FALSE if failure */
278 gboolean gnc_tree_model_split_reg_set_blank_split_parent (
279  GncTreeModelSplitReg *model, Transaction *trans, gboolean remove_only);
280 
281 /* Return the blank split */
282 Split * gnc_tree_model_split_get_blank_split (GncTreeModelSplitReg *model);
283 
284 /* Return TRUE if blank_split is on trans */
285 gboolean gnc_tree_model_split_reg_is_blank_split_parent (GncTreeModelSplitReg *model, Transaction *trans);
286 
287 /* Return the blank trans */
288 Transaction * gnc_tree_model_split_get_blank_trans (GncTreeModelSplitReg *model);
289 
290 /* If 'trans' is NULL, use split's parent. If 'split' is NULL, just
291  get the transaction iter. */
292 gboolean gnc_tree_model_split_reg_get_iter_from_trans_and_split (
293  GncTreeModelSplitReg *model, Transaction *trans, Split *split,
294  GtkTreeIter *iter1, GtkTreeIter *iter2);
295 
296 /* Return the row color for the view */
297 gchar * gnc_tree_model_split_reg_get_row_color (GncTreeModelSplitReg *model, gboolean is_trow1,
298  gboolean is_trow2, gboolean is_split, gint num);
299 
300 /* Return the tooltip for transaction at position in full_tlist. */
301 gchar * gnc_tree_model_split_reg_get_tooltip (GncTreeModelSplitReg *model, gint position);
302 
303 /* Set the current transaction to that at position in full_tlist */
304 void gnc_tree_model_split_reg_set_current_trans_by_position (GncTreeModelSplitReg *model, gint position);
305 
306 /* Return TRUE if this transaction is read only for the view */
307 gboolean
308 gnc_tree_model_split_reg_get_read_only (GncTreeModelSplitReg *model, Transaction *trans);
309 
310 /* Return TRUE if this is a sub account view */
311 gboolean
312 gnc_tree_model_split_reg_get_sub_account (GncTreeModelSplitReg *model);
313 
314 /* Return the tree path, if split and trans are null, last in list returned */
315 GtkTreePath * gnc_tree_model_split_reg_get_path_to_split_and_trans (
316  GncTreeModelSplitReg *model, Split *split, Transaction *trans);
317 
318 /* Returns TRUE if iter is a blank transaction */
319 gboolean gnc_tree_model_split_reg_is_blank_trans (GncTreeModelSplitReg *model, GtkTreeIter *iter);
320 
321 /* Return the split for which ancestor is it's parent */
322 Split * gnc_tree_model_split_reg_trans_get_split_equal_to_ancestor (const Transaction *trans, const Account *ancestor);
323 
324 /* Dummy Sort function */
325 gint gnc_tree_model_split_reg_sort_iter_compare_func (GtkTreeModel *tm, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data);
326 
327 /*****************************************************************************/
328 
329 G_END_DECLS
330 
331 #endif /* __GNC_TREE_MODEL_SPLIT_REG_H */
GtkTreeModel implementation for a generic gnucash tree.
Definition: SplitP.h:71