1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2017 Maxime DOYEN
4 * This file is part of HomeBank.
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.
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.
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/>.
22 #include "list_upcoming.h"
24 /* our global datas */
25 extern struct HomeBank
*GLOBALS
;
26 extern struct Preferences
*PREFS
;
30 sched_lateicon_cell_data_function (GtkTreeViewColumn
*col
,
31 GtkCellRenderer
*renderer
,
36 gchar
*iconname
= NULL
;
39 gtk_tree_model_get(model
, iter
,
40 LST_DSPUPC_NB_LATE
, &nblate
,
43 iconname
= ( nblate
> 0 ) ? ICONNAME_WARNING
: NULL
;
45 g_object_set(renderer
, "icon-name", iconname
, NULL
);
50 ** remaining cell function
52 static void sched_latetext_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
60 gtk_tree_model_get(model
, iter
,
61 LST_DSPUPC_DATAS
, &arc
,
62 LST_DSPUPC_NB_LATE
, &nblate
,
67 markuptxt
= g_strdup_printf(nblate
< 10 ? "%d" : "+10", nblate
);
70 //weight = PANGO_WEIGHT_NORMAL;
72 if(nblate
> 0 && PREFS
->custom_colors
== TRUE
)
74 color
= PREFS
->color_warn
;
77 g_object_set(renderer
,
86 g_object_set(renderer
, "text", NULL
, NULL
);
91 ** remaining cell function
94 /*static void remaining_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
100 gtk_tree_model_get(model, iter,
101 LST_DSPUPC_DATAS, &arc,
102 LST_DSPUPC_REMAINING, &remaining,
105 if(arc && remaining > 0)
107 markuptxt = g_strdup_printf("%d", remaining);
108 g_object_set(renderer, "markup", markuptxt, NULL);
112 g_object_set(renderer, "text", NULL, NULL);
118 ** date cell function
120 static void date_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
126 gtk_tree_model_get(model
, iter
,
127 LST_DSPUPC_DATAS
, &arc
,
132 date
= g_date_new_julian (arc
->nextdate
);
133 g_date_strftime (buffer
, 256-1, PREFS
->date_format
, date
);
136 //g_snprintf(buf, sizeof(buf), "%d", ope->ope_Date);
138 g_object_set(renderer
, "text", buffer
, NULL
);
142 g_object_set(renderer
, "text", NULL
, NULL
);
147 ** payee cell function
149 static void payee_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
154 gtk_tree_model_get(model
, iter
,
155 LST_DSPUPC_DATAS
, &arc
,
161 pay
= da_pay_get(arc
->kpay
);
164 g_object_set(renderer
, "text", pay
->name
, NULL
);
167 g_object_set(renderer
, "text", NULL
, NULL
);
172 ** wording cell function
174 static void wording_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
180 gtk_tree_model_get(model
, iter
,
181 LST_DSPUPC_DATAS
, &arc
,
182 LST_DSPUPC_WORDING
, &txt
,
185 weight
= arc
== NULL
? PANGO_WEIGHT_BOLD
: PANGO_WEIGHT_NORMAL
;
187 g_object_set(renderer
, "weight", weight
, "text", txt
, NULL
);
193 ** amount cell function
195 static void amount_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
198 gdouble expense
, income
, amount
;
199 gchar buf
[G_ASCII_DTOSTR_BUF_SIZE
];
200 gint column
= GPOINTER_TO_INT(user_data
);
205 gtk_tree_model_get(model
, iter
,
206 LST_DSPUPC_DATAS
, &arc
,
207 LST_DSPUPC_ACCOUNT
, &acc
,
208 LST_DSPUPC_EXPENSE
, &expense
,
209 LST_DSPUPC_INCOME
, &income
,
212 amount
= column
== -1 ? expense
: income
;
217 hb_strfmon(buf
, G_ASCII_DTOSTR_BUF_SIZE
-1, amount
, acc
->kcur
, GLOBALS
->minor
);
219 hb_strfmon(buf
, G_ASCII_DTOSTR_BUF_SIZE
-1, amount
, GLOBALS
->kcur
, GLOBALS
->minor
);
221 color
= get_normal_color_amount(amount
);
223 weight
= arc
== NULL
? PANGO_WEIGHT_BOLD
: PANGO_WEIGHT_NORMAL
;
225 g_object_set(renderer
,
233 g_object_set(renderer
, "text", NULL
, NULL
);
239 ** account cell function
241 static void account_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
246 gtk_tree_model_get(model
, iter
,
247 LST_DSPUPC_ACCOUNT
, &acc
,
249 /* 1378836 display acc or dstacc */
255 g_object_set(renderer
, "text", name
, NULL
);
261 gboolean
list_account_selectionfunc(
262 GtkTreeSelection
*selection
, GtkTreeModel
*model
, GtkTreePath
*path
, gboolean path_currently_selected
, gpointer data
)
267 if(gtk_tree_model_get_iter(model
, &iter
, path
))
269 gtk_tree_model_get(model
, &iter
,
270 LST_DSPUPC_DATAS
, &arc
,
281 static void list_upcoming_destroy(GtkTreeView
*treeview
, gpointer user_data
)
283 GtkTreeViewColumn
*column
;
285 //todo: unsafe to use direct column index
286 column
= gtk_tree_view_get_column(treeview
, 2);
289 PREFS
->pnl_upc_col_pay_width
= gtk_tree_view_column_get_width(column
);
292 column
= gtk_tree_view_get_column(treeview
, 3);
295 PREFS
->pnl_upc_col_mem_width
= gtk_tree_view_column_get_width(column
);
301 GtkWidget
*create_list_upcoming(void)
305 GtkCellRenderer
*renderer
;
306 GtkTreeViewColumn
*column
;
308 /* create list store */
309 store
= gtk_list_store_new(
312 G_TYPE_BOOLEAN
, /* payee */
313 G_TYPE_STRING
, /* wording */
314 G_TYPE_DOUBLE
, /* expense */
315 G_TYPE_DOUBLE
, /* income */
316 G_TYPE_POINTER
, /* account */
317 G_TYPE_BOOLEAN
, /* next on */
318 G_TYPE_INT
, /* remaining */
319 G_TYPE_INT
/* nb late */
323 view
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(store
));
324 g_object_unref(store
);
326 gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view
), PREFS
->grid_lines
);
327 //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
328 // COLUMN_DESCRIPTION);
330 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view
)), GTK_SELECTION_SINGLE
);
333 column
= gtk_tree_view_column_new();
334 //TRANSLATORS: title of list column to inform the scheduled transaction is Late
335 gtk_tree_view_column_set_title(column
, _("Late"));
337 renderer
= gtk_cell_renderer_pixbuf_new ();
338 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
339 gtk_tree_view_column_set_cell_data_func(column
, renderer
, sched_lateicon_cell_data_function
, NULL
, NULL
);
341 renderer
= gtk_cell_renderer_text_new ();
342 g_object_set(renderer
, "xalign", 1.0, NULL
);
343 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
344 gtk_tree_view_column_set_cell_data_func(column
, renderer
, sched_latetext_cell_data_function
, NULL
, NULL
);
346 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_NB_LATE);
347 gtk_tree_view_column_set_alignment (column
, 0.5);
348 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
350 /* column : Remaining */
351 /*column = gtk_tree_view_column_new();
352 gtk_tree_view_column_set_title(column, _("In"));
354 renderer = gtk_cell_renderer_text_new ();
355 g_object_set(renderer, "xalign", 1.0, NULL);
356 gtk_tree_view_column_pack_start(column, renderer, TRUE);
357 gtk_tree_view_column_set_cell_data_func(column, renderer, remaining_cell_data_function, NULL, NULL);
358 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_REMAINING);
359 gtk_tree_view_column_set_alignment (column, 0.5);
360 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
363 /* column: Next on */
364 renderer
= gtk_cell_renderer_text_new ();
366 column
= gtk_tree_view_column_new();
367 gtk_tree_view_column_set_title(column
, _("Next date"));
368 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
369 gtk_tree_view_column_set_cell_data_func(column
, renderer
, date_cell_data_function
, NULL
, NULL
);
370 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_DATE);
371 gtk_tree_view_column_set_alignment (column
, 0.5);
372 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
375 renderer
= gtk_cell_renderer_text_new ();
376 g_object_set(renderer
,
377 "ellipsize", PANGO_ELLIPSIZE_END
,
378 "ellipsize-set", TRUE
,
380 column
= gtk_tree_view_column_new();
381 gtk_tree_view_column_set_title(column
, _("Payee"));
382 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
383 gtk_tree_view_column_set_cell_data_func(column
, renderer
, payee_cell_data_function
, NULL
, NULL
);
384 gtk_tree_view_column_set_resizable(column
, TRUE
);
385 //gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
386 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
387 gtk_tree_view_column_set_alignment (column
, 0.5);
388 gtk_tree_view_column_set_min_width(column
, HB_MINWIDTH_LIST
/2);
389 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
391 gtk_tree_view_column_set_fixed_width(column
, PREFS
->pnl_upc_col_pay_width
);
393 /* column: Wording */
394 renderer
= gtk_cell_renderer_text_new ();
395 g_object_set(renderer
,
396 "ellipsize", PANGO_ELLIPSIZE_END
,
397 "ellipsize-set", TRUE
,
400 column
= gtk_tree_view_column_new();
401 gtk_tree_view_column_set_title(column
, _("Memo"));
402 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
403 gtk_tree_view_column_set_cell_data_func(column
, renderer
, wording_cell_data_function
, NULL
, NULL
);
404 gtk_tree_view_column_set_resizable(column
, TRUE
);
405 //gtk_tree_view_column_add_attribute(column, renderer, "text", 2);
406 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
407 gtk_tree_view_column_set_alignment (column
, 0.5);
408 gtk_tree_view_column_set_min_width(column
, HB_MINWIDTH_LIST
/2);
409 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
411 gtk_tree_view_column_set_fixed_width(column
, PREFS
->pnl_upc_col_mem_width
);
414 column
= gtk_tree_view_column_new();
415 gtk_tree_view_column_set_title(column
, _("Expense"));
416 renderer
= gtk_cell_renderer_text_new ();
417 g_object_set(renderer
, "xalign", 1.0, NULL
);
418 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
419 gtk_tree_view_column_set_cell_data_func(column
, renderer
, amount_cell_data_function
, GINT_TO_POINTER(-1), NULL
);
420 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
421 gtk_tree_view_column_set_alignment (column
, 0.5);
422 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
425 column
= gtk_tree_view_column_new();
426 gtk_tree_view_column_set_title(column
, _("Income"));
427 renderer
= gtk_cell_renderer_text_new ();
428 g_object_set(renderer
, "xalign", 1.0, NULL
);
429 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
430 gtk_tree_view_column_set_cell_data_func(column
, renderer
, amount_cell_data_function
, GINT_TO_POINTER(1), NULL
);
431 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
432 gtk_tree_view_column_set_alignment (column
, 0.5);
433 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
435 /* column: Account */
436 renderer
= gtk_cell_renderer_text_new ();
437 /*g_object_set(renderer,
438 "ellipsize", PANGO_ELLIPSIZE_END,
439 "ellipsize-set", TRUE,
442 column
= gtk_tree_view_column_new();
443 gtk_tree_view_column_set_title(column
, _("Account"));
444 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
445 gtk_tree_view_column_set_cell_data_func(column
, renderer
, account_cell_data_function
, NULL
, NULL
);
446 gtk_tree_view_column_set_resizable(column
, TRUE
);
447 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
448 gtk_tree_view_column_set_alignment (column
, 0.5);
449 //gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST);
450 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
457 column
= gtk_tree_view_column_new();
458 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
460 gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(view
)), list_account_selectionfunc
, NULL
, NULL
);
463 /* set initial sort order */
464 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store
), LST_DSPUPC_REMAINING
, GTK_SORT_ASCENDING
);
467 g_signal_connect (view
, "destroy", G_CALLBACK (list_upcoming_destroy
), NULL
);