]> Dogcows Code - chaz/homebank/blob - src/list_upcoming.c
import homebank-5.1.7
[chaz/homebank] / src / list_upcoming.c
1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2018 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
21 #include "homebank.h"
22
23 #include "list_upcoming.h"
24
25 /****************************************************************************/
26 /* Debug macros */
27 /****************************************************************************/
28 #define MYDEBUG 0
29
30 #if MYDEBUG
31 #define DB(x) (x);
32 #else
33 #define DB(x);
34 #endif
35
36 /* our global datas */
37 extern struct HomeBank *GLOBALS;
38 extern struct Preferences *PREFS;
39
40
41 static void
42 sched_lateicon_cell_data_function (GtkTreeViewColumn *col,
43 GtkCellRenderer *renderer,
44 GtkTreeModel *model,
45 GtkTreeIter *iter,
46 gpointer user_data)
47 {
48 gchar *iconname = NULL;
49 gint nblate;
50
51 gtk_tree_model_get(model, iter,
52 LST_DSPUPC_NB_LATE, &nblate,
53 -1);
54
55 iconname = ( nblate > 0 ) ? ICONNAME_WARNING : NULL;
56
57 g_object_set(renderer, "icon-name", iconname, NULL);
58 }
59
60
61 /*
62 ** remaining cell function
63 */
64 static void sched_latetext_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
65 {
66 Archive *arc;
67 gchar *markuptxt;
68 gchar *color;
69 gint nblate;
70 //gint weight;
71
72 gtk_tree_model_get(model, iter,
73 LST_DSPUPC_DATAS, &arc,
74 LST_DSPUPC_NB_LATE, &nblate,
75 -1);
76
77 if(arc && nblate > 0)
78 {
79 markuptxt = g_strdup_printf(nblate < 10 ? "%d" : "+10", nblate);
80
81 color = NULL;
82 //weight = PANGO_WEIGHT_NORMAL;
83
84 if(nblate > 0 && PREFS->custom_colors == TRUE)
85 {
86 color = PREFS->color_warn;
87 }
88
89 g_object_set(renderer,
90 //"weight", weight,
91 "foreground", color,
92 "text", markuptxt,
93 NULL);
94
95 g_free(markuptxt);
96 }
97 else
98 g_object_set(renderer, "text", NULL, NULL);
99
100 }
101
102 /*
103 ** remaining cell function
104 */
105
106 /*static void remaining_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
107 {
108 Archive *arc;
109 gchar *markuptxt;
110 guint remaining;
111
112 gtk_tree_model_get(model, iter,
113 LST_DSPUPC_DATAS, &arc,
114 LST_DSPUPC_REMAINING, &remaining,
115 -1);
116
117 if(arc && remaining > 0)
118 {
119 markuptxt = g_strdup_printf("%d", remaining);
120 g_object_set(renderer, "markup", markuptxt, NULL);
121 g_free(markuptxt);
122 }
123 else
124 g_object_set(renderer, "text", NULL, NULL);
125
126 }*/
127
128
129 /*
130 ** date cell function
131 */
132 static void date_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
133 {
134 Archive *arc;
135 gchar buffer[256];
136 GDate *date;
137
138 gtk_tree_model_get(model, iter,
139 LST_DSPUPC_DATAS, &arc,
140 -1);
141
142 if(arc)
143 {
144 date = g_date_new_julian (arc->nextdate);
145 g_date_strftime (buffer, 256-1, PREFS->date_format, date);
146 g_date_free(date);
147
148 //g_snprintf(buf, sizeof(buf), "%d", ope->ope_Date);
149
150 g_object_set(renderer, "text", buffer, NULL);
151
152 }
153 else
154 g_object_set(renderer, "text", NULL, NULL);
155
156 }
157
158 /*
159 ** payee cell function
160 */
161 static void payee_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
162 {
163 Archive *arc;
164 Payee *pay;
165
166 gtk_tree_model_get(model, iter,
167 LST_DSPUPC_DATAS, &arc,
168 -1);
169
170 if(arc)
171 {
172
173 pay = da_pay_get(arc->kpay);
174
175 if(pay != NULL)
176 g_object_set(renderer, "text", pay->name, NULL);
177 }
178 else
179 g_object_set(renderer, "text", NULL, NULL);
180
181 }
182
183 /*
184 ** memo cell function
185 */
186 static void memo_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
187 {
188 Archive *arc;
189 gchar *memo;
190 gint weight;
191
192 gtk_tree_model_get(model, iter,
193 LST_DSPUPC_DATAS, &arc,
194 LST_DSPUPC_MEMO, &memo,
195 -1);
196
197 weight = arc == NULL ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL;
198
199 g_object_set(renderer, "weight", weight, "text", memo, NULL);
200
201 //leak
202 g_free(memo);
203
204 }
205
206
207 /*
208 ** amount cell function
209 */
210 static void amount_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
211 {
212 Archive *arc;
213 gdouble expense, income, amount;
214 gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
215 gint column = GPOINTER_TO_INT(user_data);
216 Account *acc;
217 gchar *color;
218 gint weight;
219
220 gtk_tree_model_get(model, iter,
221 LST_DSPUPC_DATAS, &arc,
222 LST_DSPUPC_ACCOUNT, &acc,
223 LST_DSPUPC_EXPENSE, &expense,
224 LST_DSPUPC_INCOME, &income,
225 -1);
226
227 amount = column == -1 ? expense : income;
228
229 if( amount != 0.0)
230 {
231 if( acc != NULL )
232 hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, amount, acc->kcur, GLOBALS->minor);
233 else
234 hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, amount, GLOBALS->kcur, GLOBALS->minor);
235
236 color = get_normal_color_amount(amount);
237
238 weight = arc == NULL ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL;
239
240 g_object_set(renderer,
241 "weight", weight,
242 "foreground", color,
243 "text", buf,
244 NULL);
245 }
246 else
247 {
248 g_object_set(renderer, "text", NULL, NULL);
249 }
250
251 }
252
253 /*
254 ** account cell function
255 */
256 static void account_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
257 {
258 Account *acc;
259 gchar *name = NULL;
260
261 gtk_tree_model_get(model, iter,
262 LST_DSPUPC_ACCOUNT, &acc,
263 -1);
264 /* 1378836 display acc or dstacc */
265 if( acc != NULL )
266 {
267 name = acc->name;
268 }
269
270 g_object_set(renderer, "text", name, NULL);
271
272 }
273
274
275 static
276 gboolean list_account_selectionfunc(
277 GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data)
278 {
279 GtkTreeIter iter;
280 Archive *arc;
281
282 if(gtk_tree_model_get_iter(model, &iter, path))
283 {
284 gtk_tree_model_get(model, &iter,
285 LST_DSPUPC_DATAS, &arc,
286 -1);
287
288 if( arc == NULL )
289 return FALSE;
290 }
291
292 return TRUE;
293 }
294
295
296 static void list_upcoming_destroy(GtkTreeView *treeview, gpointer user_data)
297 {
298 GtkTreeViewColumn *column;
299
300 DB( g_print ("\n[list_upcoming] destroy\n") );
301
302 //todo: unsafe to use direct column index
303 column = gtk_tree_view_get_column(treeview, 2);
304 if( column )
305 {
306 PREFS->pnl_upc_col_pay_width = gtk_tree_view_column_get_width(column);
307 }
308
309 column = gtk_tree_view_get_column(treeview, 3);
310 if( column )
311 {
312 PREFS->pnl_upc_col_mem_width = gtk_tree_view_column_get_width(column);
313 }
314
315 }
316
317
318 GtkWidget *create_list_upcoming(void)
319 {
320 GtkListStore *store;
321 GtkWidget *view;
322 GtkCellRenderer *renderer;
323 GtkTreeViewColumn *column;
324
325 DB( g_print ("\n[list_upcoming] create\n") );
326
327 /* create list store */
328 store = gtk_list_store_new(
329 NUM_LST_DSPUPC,
330 G_TYPE_POINTER,
331 G_TYPE_BOOLEAN, /* payee */
332 G_TYPE_STRING, /* memo */
333 G_TYPE_DOUBLE, /* expense */
334 G_TYPE_DOUBLE, /* income */
335 G_TYPE_POINTER, /* account */
336 G_TYPE_BOOLEAN, /* next on */
337 G_TYPE_INT, /* remaining */
338 G_TYPE_INT /* nb late */
339 );
340
341 //treeview
342 view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
343 g_object_unref(store);
344
345 gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view), PREFS->grid_lines);
346 //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
347 // COLUMN_DESCRIPTION);
348
349 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_SINGLE);
350
351 /* column : Late */
352 column = gtk_tree_view_column_new();
353 //TRANSLATORS: title of list column to inform the scheduled transaction is Late
354 gtk_tree_view_column_set_title(column, _("Late"));
355
356 renderer = gtk_cell_renderer_pixbuf_new ();
357 gtk_tree_view_column_pack_start(column, renderer, TRUE);
358 gtk_tree_view_column_set_cell_data_func(column, renderer, sched_lateicon_cell_data_function, NULL, NULL);
359
360 renderer = gtk_cell_renderer_text_new ();
361 g_object_set(renderer, "xalign", 1.0, NULL);
362 gtk_tree_view_column_pack_start(column, renderer, TRUE);
363 gtk_tree_view_column_set_cell_data_func(column, renderer, sched_latetext_cell_data_function, NULL, NULL);
364
365 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_NB_LATE);
366 gtk_tree_view_column_set_alignment (column, 0.5);
367 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
368
369 /* column : Remaining */
370 /*column = gtk_tree_view_column_new();
371 gtk_tree_view_column_set_title(column, _("In"));
372
373 renderer = gtk_cell_renderer_text_new ();
374 g_object_set(renderer, "xalign", 1.0, NULL);
375 gtk_tree_view_column_pack_start(column, renderer, TRUE);
376 gtk_tree_view_column_set_cell_data_func(column, renderer, remaining_cell_data_function, NULL, NULL);
377 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_REMAINING);
378 gtk_tree_view_column_set_alignment (column, 0.5);
379 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
380 */
381
382 /* column: Next on */
383 renderer = gtk_cell_renderer_text_new ();
384
385 column = gtk_tree_view_column_new();
386 gtk_tree_view_column_set_title(column, _("Next date"));
387 gtk_tree_view_column_pack_start(column, renderer, TRUE);
388 gtk_tree_view_column_set_cell_data_func(column, renderer, date_cell_data_function, NULL, NULL);
389 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_DATE);
390 gtk_tree_view_column_set_alignment (column, 0.5);
391 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
392
393 /* column: Payee */
394 renderer = gtk_cell_renderer_text_new ();
395 g_object_set(renderer,
396 "ellipsize", PANGO_ELLIPSIZE_END,
397 "ellipsize-set", TRUE,
398 NULL);
399 column = gtk_tree_view_column_new();
400 gtk_tree_view_column_set_title(column, _("Payee"));
401 gtk_tree_view_column_pack_start(column, renderer, TRUE);
402 gtk_tree_view_column_set_cell_data_func(column, renderer, payee_cell_data_function, NULL, NULL);
403 gtk_tree_view_column_set_resizable(column, TRUE);
404 //gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
405 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
406 gtk_tree_view_column_set_alignment (column, 0.5);
407 gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST/2);
408 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
409
410 gtk_tree_view_column_set_fixed_width(column, PREFS->pnl_upc_col_pay_width);
411
412 /* column: Memo */
413 renderer = gtk_cell_renderer_text_new ();
414 g_object_set(renderer,
415 "ellipsize", PANGO_ELLIPSIZE_END,
416 "ellipsize-set", TRUE,
417 NULL);
418
419 column = gtk_tree_view_column_new();
420 gtk_tree_view_column_set_title(column, _("Memo"));
421 gtk_tree_view_column_pack_start(column, renderer, TRUE);
422 gtk_tree_view_column_set_cell_data_func(column, renderer, memo_cell_data_function, NULL, NULL);
423 gtk_tree_view_column_set_resizable(column, TRUE);
424 //gtk_tree_view_column_add_attribute(column, renderer, "text", 2);
425 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
426 gtk_tree_view_column_set_alignment (column, 0.5);
427 gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST/2);
428 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
429
430 gtk_tree_view_column_set_fixed_width(column, PREFS->pnl_upc_col_mem_width);
431
432 /* column: Amount */
433 column = gtk_tree_view_column_new();
434 gtk_tree_view_column_set_title(column, _("Expense"));
435 renderer = gtk_cell_renderer_text_new ();
436 g_object_set(renderer, "xalign", 1.0, NULL);
437 gtk_tree_view_column_pack_start(column, renderer, TRUE);
438 gtk_tree_view_column_set_cell_data_func(column, renderer, amount_cell_data_function, GINT_TO_POINTER(-1), NULL);
439 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
440 gtk_tree_view_column_set_alignment (column, 0.5);
441 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
442
443 /* column: Amount */
444 column = gtk_tree_view_column_new();
445 gtk_tree_view_column_set_title(column, _("Income"));
446 renderer = gtk_cell_renderer_text_new ();
447 g_object_set(renderer, "xalign", 1.0, NULL);
448 gtk_tree_view_column_pack_start(column, renderer, TRUE);
449 gtk_tree_view_column_set_cell_data_func(column, renderer, amount_cell_data_function, GINT_TO_POINTER(1), NULL);
450 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
451 gtk_tree_view_column_set_alignment (column, 0.5);
452 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
453
454 /* column: Account */
455 renderer = gtk_cell_renderer_text_new ();
456 /*g_object_set(renderer,
457 "ellipsize", PANGO_ELLIPSIZE_END,
458 "ellipsize-set", TRUE,
459 NULL);*/
460
461 column = gtk_tree_view_column_new();
462 gtk_tree_view_column_set_title(column, _("Account"));
463 gtk_tree_view_column_pack_start(column, renderer, TRUE);
464 gtk_tree_view_column_set_cell_data_func(column, renderer, account_cell_data_function, NULL, NULL);
465 gtk_tree_view_column_set_resizable(column, TRUE);
466 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
467 gtk_tree_view_column_set_alignment (column, 0.5);
468 //gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST);
469 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
470
471
472
473
474
475 /* column: empty */
476 column = gtk_tree_view_column_new();
477 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
478
479 gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), list_account_selectionfunc, NULL, NULL);
480
481
482 /* set initial sort order */
483 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), LST_DSPUPC_REMAINING, GTK_SORT_ASCENDING);
484
485
486 g_signal_connect (view, "destroy", G_CALLBACK (list_upcoming_destroy), NULL);
487
488
489 return(view);
490 }
491
This page took 0.05889 seconds and 4 git commands to generate.