]> Dogcows Code - chaz/homebank/blob - src/homebank.h
Merge branch 'upstream'
[chaz/homebank] / src / homebank.h
1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 Maxime DOYEN
3 *
4 * This file is part of HomeBank.
5 *
6 * HomeBank is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * HomeBank is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef _HOMEBANK_H_
21 #define _HOMEBANK_H_
22
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27
28 #include <ctype.h> /* isprint */
29 #include <errno.h>
30 #include <math.h>
31 #include <libintl.h>
32 #include <locale.h>
33 #include <stdlib.h> /* atoi, atof, atol */
34 #include <string.h> /* memset, memcpy, strcmp, strcpy */
35 #include <time.h>
36
37 #include <glib.h>
38 #include <glib/gstdio.h>
39 #include <gtk/gtk.h>
40
41 #include "enums.h"
42 #include "hb-preferences.h"
43
44 #include "hb-transaction.h"
45 #include "hb-currency.h"
46 #include "hb-account.h"
47 #include "hb-archive.h"
48 #include "hb-assign.h"
49 #include "hb-category.h"
50 #include "hb-encoding.h"
51 #include "hb-export.h"
52 #include "hb-filter.h"
53 #include "hb-import.h"
54 #include "hb-misc.h"
55 #include "hb-payee.h"
56 #include "hb-report.h"
57 #include "hb-tag.h"
58 #include "hb-hbfile.h"
59 #include "hb-xml.h"
60
61 #include "ui-dialogs.h"
62 #include "ui-pref.h"
63 #include "ui-widgets.h"
64
65 #define _(str) gettext (str)
66 #define gettext_noop(str) (str)
67 #define N_(str) gettext_noop (str)
68
69 /* = = = = = = = = = = = = = = = = */
70 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
71
72 #define HB_UNSTABLE FALSE
73 #define HB_UNSTABLE_SHOW FALSE
74
75
76 #define HB_VERSION_MAJOR 5
77 #define HB_VERSION_MINOR 2
78 #define HB_VERSION_MICRO 7
79
80 #define HB_VERSION "5.2.7"
81 #define HB_VERSION_NUM (HB_VERSION_MAJOR*10000) + (HB_VERSION_MINOR*100) + HB_VERSION_MICRO
82
83 #define FILE_VERSION 1.3
84 #define PREF_VERSION 527
85
86 #if HB_UNSTABLE == FALSE
87 #define PROGNAME "HomeBank"
88 #define HB_DATA_PATH "homebank"
89 #else
90 #define PROGNAME "HomeBank " HB_VERSION " (unstable)"
91 #define HB_DATA_PATH "homebank_unstable"
92 #endif
93
94
95 #ifdef G_OS_WIN32
96 #define GETTEXT_PACKAGE "homebank"
97 #define LOCALE_DIR "locale"
98 #define PIXMAPS_DIR "images"
99 #define HELP_DIR "help"
100 #define PACKAGE_VERSION HB_VERSION
101 #define PACKAGE "homebank"
102 #define VERSION HB_VERSION
103
104 //#define PORTABLE_APP
105 //#define NOOFX
106
107 #define ENABLE_NLS 1
108 #endif
109
110
111 /* container spacing */
112 #define SPACING_TINY 3
113 #define SPACING_SMALL 6
114 #define SPACING_POPOVER 10
115 #define SPACING_MEDIUM 12
116 #define SPACING_LARGE 18
117
118
119 #define HB_DATE_MAX_GAP 7
120
121 // those 2 line are duplicated into dateentry
122 #define HB_MINDATE 693596 //01/01/1900
123 #define HB_MAXDATE 803533 //31/12/2200
124
125 /* widget minimum width */
126 #define HB_MINWIDTH_LIST 161
127 #define HB_MINHEIGHT_LIST 260
128
129 #define HB_MINWIDTH_SEARCH 240
130 #define HB_MINWIDTH_COLUMN 48
131
132
133 /* miscellaneous */
134 #define PHI 1.61803399
135
136
137
138 #define HB_NUMBER_SAMPLE 1234567.89
139
140
141 typedef enum
142 {
143 FILETYPE_UNKNOWN,
144 FILETYPE_HOMEBANK,
145 FILETYPE_OFX,
146 FILETYPE_QIF,
147 FILETYPE_CSV_HB,
148 // FILETYPE_AMIGA_HB,
149 NUM_FILETYPE
150 } HbFileType;
151
152
153 /* ---- icon size as defined into gtkiconfactory.c ---- */
154 /* GTK_ICON_SIZE_MENU 16
155 * GTK_ICON_SIZE_BUTTON 20
156 * GTK_ICON_SIZE_SMALL_TOOLBAR 18
157 * GTK_ICON_SIZE_LARGE_TOOLBAR 24 (default for toolbar)
158 * GTK_ICON_SIZE_DND 32
159 * GTK_ICON_SIZE_DIALOG 48
160 */
161
162
163 /* -------- named icons (Standard Icon Name) -------- */
164
165
166 //obsolete, as since since gtk3.10 : no more icons for dialogs and menu
167 #define ICONNAME_SAVE_AS "document-save-as" //obsolete
168 #define ICONNAME_REVERT "document-revert" //obsolete
169 #define ICONNAME_PROPERTIES "document-properties" //obsolete
170 #define ICONNAME_CLOSE "window-close" //obsolete
171 #define ICONNAME_QUIT "application-exit" //obsolete
172 #define ICONNAME_HELP "help-browser" //obsolete
173 #define ICONNAME_ABOUT "help-about" //obsolete
174 #define ICONNAME_PREFERENCES "preferences-system" //obsolete
175
176
177 //#define ICONNAME_FIND "edit-find" //unused
178 //#define ICONNAME_CLEAR "edit-clear" //unused
179 //#define ICONNAME_HB_SCHED_SKIP "media-skip-forward"
180 //#define ICONNAME_HB_SCHED_POST "media-playback-start"
181
182 //in 5.2 no themeable icon to keep a consistent iconset
183
184 #define ICONNAME_WARNING "dialog-warning"
185 #define ICONNAME_ERROR "dialog-error"
186 #define ICONNAME_INFO "dialog-information"
187
188
189 #define ICONNAME_FOLDER "folder-symbolic"
190 #define ICONNAME_EMBLEM_OK "emblem-ok-symbolic"
191 #define ICONNAME_EMBLEM_SYSTEM "emblem-system-symbolic"
192 #define ICONNAME_WINDOW_CLOSE "window-close-symbolic"
193 #define ICONNAME_LIST_ADD "list-add-symbolic"
194 #define ICONNAME_LIST_REMOVE "list-remove-symbolic"
195 #define ICONNAME_LIST_REMOVE_ALL "list-remove-all-symbolic"
196 #define ICONNAME_CHANGES_PREVENT "changes-prevent-symbolic"
197 #define ICONNAME_SYSTEM_SEARCH "system-search-symbolic"
198
199 // custom or gnome not found
200 #define ICONNAME_HB_BUTTON_MENU "open-menu-symbolic"
201 #define ICONNAME_HB_BUTTON_COLLAPSE "list-collapse-all-symbolic"
202 #define ICONNAME_HB_BUTTON_EXPAND "list-expand-all-symbolic"
203 #define ICONNAME_HB_BUTTON_SPLIT "edit-split-symbolic"
204 #define ICONNAME_HB_TOGGLE_SIGN "toggle-sign-symbolic"
205
206
207 /* -------- named icons (Custom to homebank) -------- */
208
209
210 #define ICONNAME_HB_CURRENCY "hb-currency"
211 #define ICONNAME_HB_ACCOUNT "hb-account"
212 #define ICONNAME_HB_ARCHIVE "hb-archive"
213 #define ICONNAME_HB_ASSIGN "hb-assign"
214 #define ICONNAME_HB_BUDGET "hb-budget"
215 #define ICONNAME_HB_CATEGORY "hb-category"
216 #define ICONNAME_HB_PAYEE "hb-payee"
217 #define ICONNAME_HB_OPE_SHOW "hb-ope-show" //? "view-register
218 #define ICONNAME_HB_REP_STATS "hb-rep-stats"
219 #define ICONNAME_HB_REP_TIME "hb-rep-time"
220 #define ICONNAME_HB_REP_BALANCE "hb-rep-balance"
221 #define ICONNAME_HB_REP_BUDGET "hb-rep-budget"
222 #define ICONNAME_HB_REP_CAR "hb-rep-vehicle"
223
224 #define ICONNAME_HB_VIEW_LIST "hb-view-list" //"view-list-text"
225 #define ICONNAME_HB_VIEW_BAR "hb-view-bar" //"view-chart-bar"
226 #define ICONNAME_HB_VIEW_COLUMN "hb-view-column" //"view-chart-column"
227 #define ICONNAME_HB_VIEW_LINE "hb-view-line" //"view-chart-line"
228 #define ICONNAME_HB_VIEW_STACK "hb-view-stack" //"view-chart-stack"
229 #define ICONNAME_HB_VIEW_PIE "hb-view-pie" //"view-chart-pie"
230 #define ICONNAME_HB_VIEW_DONUT "hb-view-donut" //"view-chart-donut"
231 #define ICONNAME_HB_SHOW_LEGEND "hb-legend" //"view-legend"
232 #define ICONNAME_HB_SHOW_RATE "hb-rate" // obsolete ?
233 #define ICONNAME_HB_REFRESH "hb-view-refresh" //"view-refresh"
234 #define ICONNAME_HB_FILTER "hb-filter" //"edit-filter"
235
236 #define ICONNAME_HB_FILE_NEW "hb-document-new" //document-new
237 #define ICONNAME_HB_FILE_OPEN "hb-document-open" //document-open
238 #define ICONNAME_HB_FILE_SAVE "hb-document-save" //document-save
239 //#define ICONNAME_PRINT "document-print"
240 #define ICONNAME_HB_FILE_IMPORT "hb-file-import" //document-import
241 #define ICONNAME_HB_FILE_EXPORT "hb-file-export" //document-export
242 #define ICONNAME_HB_FILE_VALID "hb-file-valid"
243 #define ICONNAME_HB_FILE_INVALID "hb-file-invalid"
244
245 #define ICONNAME_HB_OPE_AUTO "hb-ope-auto" //?
246 #define ICONNAME_HB_OPE_BUDGET "hb-ope-budget" //?
247 #define ICONNAME_HB_OPE_ADD "hb-ope-add" //? "edit-add"
248 #define ICONNAME_HB_OPE_HERIT "hb-ope-herit" //? "edit-clone"
249 #define ICONNAME_HB_OPE_EDIT "hb-ope-edit" //
250 #define ICONNAME_HB_OPE_MULTIEDIT "hb-ope-multiedit" //
251 #define ICONNAME_HB_OPE_DELETE "hb-ope-delete" //? "edit-delete"
252 #define ICONNAME_CONVERT "hb-ope-convert" // obsolete ?
253 #define ICONNAME_HB_ASSIGN_RUN "hb-assign-run"
254
255 #define ICONNAME_HB_OPE_NEW "hb-ope-new"
256 // edit is defined above
257 #define ICONNAME_HB_OPE_REMIND "hb-ope-remind"
258 #define ICONNAME_HB_OPE_SIMILAR "hb-ope-similar"
259
260 #define ICONNAME_HB_OPE_CLEARED "hb-ope-cleared"
261 #define ICONNAME_HB_OPE_RECONCILED "hb-ope-reconciled"
262 #define ICONNAME_HB_OPE_FUTURE "hb-ope-future"
263
264
265 /*
266 ** Global application datas
267 */
268 struct HomeBank
269 {
270 // hbfile storage
271 GHashTable *h_cur; //currencies
272 GHashTable *h_acc; //accounts
273 GHashTable *h_pay; //payees
274 GHashTable *h_cat; //categories
275 GHashTable *h_tag; //tags
276 GHashTable *h_rul; //assign rules
277
278 GHashTable *h_memo; //memo/description
279
280 GList *arc_list; //archives
281
282 //#1419304 we keep the deleted txn to a stack trash
283 GTrashStack *txn_stk;
284
285 // hbfile (saved properties)
286 gchar *owner;
287 gshort auto_smode;
288 gshort auto_weekday;
289 gshort auto_nbdays;
290
291 guint32 vehicle_category;
292 guint32 kcur; // base currency
293
294 // hbfile (unsaved properties)
295 guint changes_count;
296 gboolean hbfile_is_new;
297 gboolean hbfile_is_bak;
298 gchar *xhb_filepath;
299 gboolean xhb_hasrevert; //file has backup (*.xhb~) used for revert menu sensitivity
300 guint64 xhb_timemodified;
301
302 // really global stuffs
303 gboolean first_run;
304 guint32 today; //today's date
305 gint define_off; //>0 when a stat, account window is opened
306 gboolean minor;
307
308 GtkWidget *mainwindow; //should be global to access attached window data
309 GtkWidget *alltxnwindow; //window to mutex all txn show
310 GtkIconTheme *icontheme;
311 //GdkPixbuf *lst_pixbuf[NUM_LST_PIXBUF];
312 //gint lst_pixbuf_maxwidth;
313
314 };
315
316
317 gchar *homebank_filepath_with_extention(gchar *path, gchar *extension);
318 gchar *homebank_filename_without_extention(gchar *path);
319 void homebank_file_ensure_xhb(gchar *filename);
320 void homebank_backup_current_file(void);
321 gboolean homebank_util_url_show (const gchar *url);
322 gchar *homebank_lastopenedfiles_load(void);
323 gboolean homebank_lastopenedfiles_save(void);
324
325
326 void homebank_window_set_icon_from_file(GtkWindow *window, gchar *filename);
327
328 const gchar *homebank_app_get_config_dir (void);
329 const gchar *homebank_app_get_images_dir (void);
330 const gchar *homebank_app_get_pixmaps_dir (void);
331 const gchar *homebank_app_get_locale_dir (void);
332 const gchar *homebank_app_get_help_dir (void);
333 const gchar *homebank_app_get_datas_dir (void);
334 guint32 homebank_app_date_get_julian(void);
335
336 /* - - - - obsolete things - - - - */
337
338 /*
339 typedef struct _budget Budget;
340
341 struct _budget
342 {
343 guint key;
344 gushort flags;
345 guint cat_key;
346 guint year;
347 gdouble value[13];
348 };
349 */
350
351 /*
352 struct _investment
353 {
354 guint date;
355 gdouble buy_amount;
356 gdouble curr_amount;
357 gdouble commission;
358 guint number;
359 guint account;
360 gchar *name;
361 gchar *symbol;
362 gchar *note;
363 };
364 */
365
366 #endif
This page took 0.053673 seconds and 5 git commands to generate.