1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2019 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/>.
23 #include "list-scheduled.h"
25 /****************************************************************************/
27 /****************************************************************************/
36 /* our global datas */
37 extern struct HomeBank
*GLOBALS
;
38 extern struct Preferences
*PREFS
;
42 sched_lateicon_cell_data_function (GtkTreeViewColumn
*col
,
43 GtkCellRenderer
*renderer
,
48 gchar
*iconname
= NULL
;
51 gtk_tree_model_get(model
, iter
,
52 LST_DSPUPC_NB_LATE
, &nblate
,
55 iconname
= ( nblate
> 0 ) ? ICONNAME_WARNING
: NULL
;
57 g_object_set(renderer
, "icon-name", iconname
, NULL
);
62 ** remaining cell function
64 static void sched_latetext_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
72 gtk_tree_model_get(model
, iter
,
73 LST_DSPUPC_DATAS
, &arc
,
74 LST_DSPUPC_NB_LATE
, &nblate
,
79 markuptxt
= g_strdup_printf(nblate
< 10 ? "%d" : "+10", nblate
);
82 //weight = PANGO_WEIGHT_NORMAL;
84 if(nblate
> 0 && PREFS
->custom_colors
== TRUE
)
86 color
= PREFS
->color_warn
;
89 g_object_set(renderer
,
98 g_object_set(renderer
, "text", NULL
, NULL
);
103 ** date cell function
105 static void date_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
111 gtk_tree_model_get(model
, iter
,
112 LST_DSPUPC_DATAS
, &arc
,
117 date
= g_date_new_julian (arc
->nextdate
);
118 g_date_strftime (buffer
, 256-1, PREFS
->date_format
, date
);
121 //g_snprintf(buf, sizeof(buf), "%d", ope->ope_Date);
123 g_object_set(renderer
, "text", buffer
, NULL
);
127 g_object_set(renderer
, "text", NULL
, NULL
);
133 ** still cell function
136 static void still_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
141 gtk_tree_model_get(model
, iter
,
142 LST_DSPUPC_DATAS
, &arc
,
145 if(arc
&& (arc
->flags
& OF_LIMIT
) )
147 markuptxt
= g_strdup_printf("%d", arc
->limit
);
148 g_object_set(renderer
, "markup", markuptxt
, NULL
);
152 g_object_set(renderer
, "text", NULL
, NULL
);
157 ** payee cell function
159 static void payee_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
164 gtk_tree_model_get(model
, iter
,
165 LST_DSPUPC_DATAS
, &arc
,
171 pay
= da_pay_get(arc
->kpay
);
174 g_object_set(renderer
, "text", pay
->name
, NULL
);
177 g_object_set(renderer
, "text", NULL
, NULL
);
182 ** memo cell function
184 static void memo_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
190 gtk_tree_model_get(model
, iter
,
191 LST_DSPUPC_DATAS
, &arc
,
192 LST_DSPUPC_MEMO
, &memo
,
195 weight
= arc
== NULL
? PANGO_WEIGHT_BOLD
: PANGO_WEIGHT_NORMAL
;
197 g_object_set(renderer
, "weight", weight
, "text", memo
, NULL
);
206 ** amount cell function
208 static void amount_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
211 gdouble expense
, income
, amount
;
212 gchar buf
[G_ASCII_DTOSTR_BUF_SIZE
];
213 gint column
= GPOINTER_TO_INT(user_data
);
218 gtk_tree_model_get(model
, iter
,
219 LST_DSPUPC_DATAS
, &arc
,
220 LST_DSPUPC_ACCOUNT
, &acc
,
221 LST_DSPUPC_EXPENSE
, &expense
,
222 LST_DSPUPC_INCOME
, &income
,
225 amount
= column
== -1 ? expense
: income
;
230 hb_strfmon(buf
, G_ASCII_DTOSTR_BUF_SIZE
-1, amount
, acc
->kcur
, GLOBALS
->minor
);
232 hb_strfmon(buf
, G_ASCII_DTOSTR_BUF_SIZE
-1, amount
, GLOBALS
->kcur
, GLOBALS
->minor
);
234 color
= get_normal_color_amount(amount
);
236 weight
= arc
== NULL
? PANGO_WEIGHT_BOLD
: PANGO_WEIGHT_NORMAL
;
238 g_object_set(renderer
,
246 g_object_set(renderer
, "text", NULL
, NULL
);
252 ** account cell function
254 static void account_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
259 gtk_tree_model_get(model
, iter
,
260 LST_DSPUPC_ACCOUNT
, &acc
,
262 /* 1378836 display acc or dstacc */
268 g_object_set(renderer
, "text", name
, NULL
);
274 gboolean
list_account_selectionfunc(
275 GtkTreeSelection
*selection
, GtkTreeModel
*model
, GtkTreePath
*path
, gboolean path_currently_selected
, gpointer data
)
280 if(gtk_tree_model_get_iter(model
, &iter
, path
))
282 gtk_tree_model_get(model
, &iter
,
283 LST_DSPUPC_DATAS
, &arc
,
294 static GtkTreeViewColumn
*list_upcoming_get_column(GtkTreeView
*treeview
, gint uid
)
296 GtkTreeViewColumn
*retval
= NULL
;
299 for(i
=0;i
<gtk_tree_view_get_n_columns(treeview
);i
++)
301 GtkTreeViewColumn
*column
= gtk_tree_view_get_column(treeview
, i
);
305 gint coluid
= GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(column
), "uid"));
314 static void list_upcoming_destroy(GtkTreeView
*treeview
, gpointer user_data
)
316 GtkTreeViewColumn
*column
;
318 DB( g_print ("\n[list_upcoming] destroy\n") );
320 //#1830656 use xxx_get_fixed_width instead of width, as if not visible will save 0 otherwise
321 column
= list_upcoming_get_column(treeview
, COL_DSPUPC_PAYEE
);
324 PREFS
->pnl_upc_col_pay_width
= gtk_tree_view_column_get_fixed_width(column
);
327 column
= list_upcoming_get_column(treeview
, COL_DSPUPC_MEMO
);
330 PREFS
->pnl_upc_col_mem_width
= gtk_tree_view_column_get_fixed_width(column
);
333 DB( g_print(" width payee:%d, memo:%d\n", PREFS
->pnl_upc_col_pay_width
, PREFS
->pnl_upc_col_mem_width
) );
338 GtkWidget
*create_list_upcoming(void)
342 GtkCellRenderer
*renderer
;
343 GtkTreeViewColumn
*column
;
345 DB( g_print ("\n[list_upcoming] create\n") );
347 /* create list store */
348 store
= gtk_list_store_new(
350 G_TYPE_POINTER
, /* scheduled */
351 G_TYPE_INT
, /* next (sort) */
352 G_TYPE_POINTER
, /* account */
353 G_TYPE_STRING
, /* memo/total */
354 G_TYPE_DOUBLE
, /* expense */
355 G_TYPE_DOUBLE
, /* income */
356 G_TYPE_INT
/* nb late */
360 view
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(store
));
361 g_object_unref(store
);
363 gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view
), PREFS
->grid_lines
);
364 //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
365 // COLUMN_DESCRIPTION);
367 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view
)), GTK_SELECTION_SINGLE
);
370 column
= gtk_tree_view_column_new();
371 //TRANSLATORS: title of list column to inform the scheduled transaction is Late
372 gtk_tree_view_column_set_title(column
, _("Late"));
374 renderer
= gtk_cell_renderer_pixbuf_new ();
375 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
376 gtk_tree_view_column_set_cell_data_func(column
, renderer
, sched_lateicon_cell_data_function
, NULL
, NULL
);
378 renderer
= gtk_cell_renderer_text_new ();
379 g_object_set(renderer
, "xalign", 1.0, NULL
);
380 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
381 gtk_tree_view_column_set_cell_data_func(column
, renderer
, sched_latetext_cell_data_function
, NULL
, NULL
);
383 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_NB_LATE);
384 gtk_tree_view_column_set_alignment (column
, 0.5);
385 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
387 /* column : Still (for limited scheduled) */
388 column
= gtk_tree_view_column_new();
389 //TRANSLATORS: title of list column to inform how many occurence remain to post for limited scheduled txn
390 gtk_tree_view_column_set_title(column
, _("Still"));
392 renderer
= gtk_cell_renderer_text_new ();
393 g_object_set(renderer
, "xalign", 1.0, NULL
);
394 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
395 gtk_tree_view_column_set_cell_data_func(column
, renderer
, still_cell_data_function
, NULL
, NULL
);
396 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_REMAINING);
397 gtk_tree_view_column_set_alignment (column
, 0.5);
398 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
400 /* column: Next on */
401 renderer
= gtk_cell_renderer_text_new ();
403 column
= gtk_tree_view_column_new();
404 gtk_tree_view_column_set_title(column
, _("Next date"));
405 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
406 gtk_tree_view_column_set_cell_data_func(column
, renderer
, date_cell_data_function
, NULL
, NULL
);
407 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_DATE);
408 gtk_tree_view_column_set_alignment (column
, 0.5);
409 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
412 renderer
= gtk_cell_renderer_text_new ();
413 g_object_set(renderer
,
414 "ellipsize", PANGO_ELLIPSIZE_END
,
415 "ellipsize-set", TRUE
,
417 column
= gtk_tree_view_column_new();
418 g_object_set_data(G_OBJECT(column
), "uid", GUINT_TO_POINTER(COL_DSPUPC_PAYEE
));
419 gtk_tree_view_column_set_title(column
, _("Payee"));
420 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
421 gtk_tree_view_column_set_cell_data_func(column
, renderer
, payee_cell_data_function
, NULL
, NULL
);
422 gtk_tree_view_column_set_resizable(column
, TRUE
);
423 //gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
424 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
425 gtk_tree_view_column_set_alignment (column
, 0.5);
426 gtk_tree_view_column_set_min_width(column
, HB_MINWIDTH_LIST
/2);
427 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
429 gtk_tree_view_column_set_fixed_width(column
, PREFS
->pnl_upc_col_pay_width
);
432 renderer
= gtk_cell_renderer_text_new ();
433 g_object_set(renderer
,
434 "ellipsize", PANGO_ELLIPSIZE_END
,
435 "ellipsize-set", TRUE
,
438 column
= gtk_tree_view_column_new();
439 g_object_set_data(G_OBJECT(column
), "uid", GUINT_TO_POINTER(COL_DSPUPC_MEMO
));
440 gtk_tree_view_column_set_title(column
, _("Memo"));
441 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
442 gtk_tree_view_column_set_cell_data_func(column
, renderer
, memo_cell_data_function
, NULL
, NULL
);
443 gtk_tree_view_column_set_resizable(column
, TRUE
);
444 //gtk_tree_view_column_add_attribute(column, renderer, "text", 2);
445 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
446 gtk_tree_view_column_set_alignment (column
, 0.5);
447 gtk_tree_view_column_set_min_width(column
, HB_MINWIDTH_LIST
/2);
448 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
450 gtk_tree_view_column_set_fixed_width(column
, PREFS
->pnl_upc_col_mem_width
);
453 column
= gtk_tree_view_column_new();
454 gtk_tree_view_column_set_title(column
, _("Expense"));
455 renderer
= gtk_cell_renderer_text_new ();
456 g_object_set(renderer
, "xalign", 1.0, NULL
);
457 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
458 gtk_tree_view_column_set_cell_data_func(column
, renderer
, amount_cell_data_function
, GINT_TO_POINTER(-1), NULL
);
459 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
460 gtk_tree_view_column_set_alignment (column
, 0.5);
461 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
464 column
= gtk_tree_view_column_new();
465 gtk_tree_view_column_set_title(column
, _("Income"));
466 renderer
= gtk_cell_renderer_text_new ();
467 g_object_set(renderer
, "xalign", 1.0, NULL
);
468 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
469 gtk_tree_view_column_set_cell_data_func(column
, renderer
, amount_cell_data_function
, GINT_TO_POINTER(1), NULL
);
470 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
471 gtk_tree_view_column_set_alignment (column
, 0.5);
472 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
474 /* column: Account */
475 renderer
= gtk_cell_renderer_text_new ();
476 /*g_object_set(renderer,
477 "ellipsize", PANGO_ELLIPSIZE_END,
478 "ellipsize-set", TRUE,
481 column
= gtk_tree_view_column_new();
482 g_object_set_data(G_OBJECT(column
), "uid", GUINT_TO_POINTER(COL_DSPUPC_ACCOUNT
));
483 gtk_tree_view_column_set_title(column
, _("Account"));
484 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
485 gtk_tree_view_column_set_cell_data_func(column
, renderer
, account_cell_data_function
, NULL
, NULL
);
486 gtk_tree_view_column_set_resizable(column
, TRUE
);
487 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
488 gtk_tree_view_column_set_alignment (column
, 0.5);
489 //gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST);
490 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
494 column
= gtk_tree_view_column_new();
495 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
497 gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(view
)), list_account_selectionfunc
, NULL
, NULL
);
500 /* set initial sort order */
501 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store
), LST_DSPUPC_NEXT
, GTK_SORT_ASCENDING
);
504 g_signal_connect (view
, "destroy", G_CALLBACK (list_upcoming_destroy
), NULL
);