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
column = list_upcoming_get_column(treeview, COL_DSPUPC_PAYEE);
323
PREFS->pnl_upc_col_pay_width = gtk_tree_view_column_get_width(column);
326
column = list_upcoming_get_column(treeview, COL_DSPUPC_MEMO);
329
PREFS->pnl_upc_col_mem_width = gtk_tree_view_column_get_width(column);
332
DB( g_print(" width payee:%d, memo:%d\n", PREFS->pnl_upc_col_pay_width, PREFS->pnl_upc_col_mem_width) );
337
GtkWidget *create_list_upcoming(void)
341
GtkCellRenderer *renderer;
342
GtkTreeViewColumn *column;
344
DB( g_print ("\n[list_upcoming] create\n") );
346
/* create list store */
347
store = gtk_list_store_new(
349
G_TYPE_POINTER, /* scheduled */
350
G_TYPE_INT, /* next (sort) */
351
G_TYPE_POINTER, /* account */
352
G_TYPE_STRING, /* memo/total */
353
G_TYPE_DOUBLE, /* expense */
354
G_TYPE_DOUBLE, /* income */
355
G_TYPE_INT /* nb late */
359
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
360
g_object_unref(store);
362
gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view), PREFS->grid_lines);
363
//gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
364
// COLUMN_DESCRIPTION);
366
gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_SINGLE);
369
column = gtk_tree_view_column_new();
370
//TRANSLATORS: title of list column to inform the scheduled transaction is Late
371
gtk_tree_view_column_set_title(column, _("Late"));
373
renderer = gtk_cell_renderer_pixbuf_new ();
374
gtk_tree_view_column_pack_start(column, renderer, TRUE);
375
gtk_tree_view_column_set_cell_data_func(column, renderer, sched_lateicon_cell_data_function, NULL, NULL);
377
renderer = gtk_cell_renderer_text_new ();
378
g_object_set(renderer, "xalign", 1.0, NULL);
379
gtk_tree_view_column_pack_start(column, renderer, TRUE);
380
gtk_tree_view_column_set_cell_data_func(column, renderer, sched_latetext_cell_data_function, NULL, NULL);
382
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_NB_LATE);
383
gtk_tree_view_column_set_alignment (column, 0.5);
384
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
386
/* column : Still (for limited scheduled) */
387
column = gtk_tree_view_column_new();
388
//TRANSLATORS: title of list column to inform how many occurence remain to post for limited scheduled txn
389
gtk_tree_view_column_set_title(column, _("Still"));
391
renderer = gtk_cell_renderer_text_new ();
392
g_object_set(renderer, "xalign", 1.0, NULL);
393
gtk_tree_view_column_pack_start(column, renderer, TRUE);
394
gtk_tree_view_column_set_cell_data_func(column, renderer, still_cell_data_function, NULL, NULL);
395
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_REMAINING);
396
gtk_tree_view_column_set_alignment (column, 0.5);
397
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
399
/* column: Next on */
400
renderer = gtk_cell_renderer_text_new ();
402
column = gtk_tree_view_column_new();
403
gtk_tree_view_column_set_title(column, _("Next date"));
404
gtk_tree_view_column_pack_start(column, renderer, TRUE);
405
gtk_tree_view_column_set_cell_data_func(column, renderer, date_cell_data_function, NULL, NULL);
406
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_DATE);
407
gtk_tree_view_column_set_alignment (column, 0.5);
408
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
411
renderer = gtk_cell_renderer_text_new ();
412
g_object_set(renderer,
413
"ellipsize", PANGO_ELLIPSIZE_END,
414
"ellipsize-set", TRUE,
416
column = gtk_tree_view_column_new();
417
g_object_set_data(G_OBJECT(column), "uid", GUINT_TO_POINTER(COL_DSPUPC_PAYEE));
418
gtk_tree_view_column_set_title(column, _("Payee"));
419
gtk_tree_view_column_pack_start(column, renderer, TRUE);
420
gtk_tree_view_column_set_cell_data_func(column, renderer, payee_cell_data_function, NULL, NULL);
421
gtk_tree_view_column_set_resizable(column, TRUE);
422
//gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
423
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
424
gtk_tree_view_column_set_alignment (column, 0.5);
425
gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST/2);
426
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
428
gtk_tree_view_column_set_fixed_width(column, PREFS->pnl_upc_col_pay_width);
431
renderer = gtk_cell_renderer_text_new ();
432
g_object_set(renderer,
433
"ellipsize", PANGO_ELLIPSIZE_END,
434
"ellipsize-set", TRUE,
437
column = gtk_tree_view_column_new();
438
g_object_set_data(G_OBJECT(column), "uid", GUINT_TO_POINTER(COL_DSPUPC_MEMO));
439
gtk_tree_view_column_set_title(column, _("Memo"));
440
gtk_tree_view_column_pack_start(column, renderer, TRUE);
441
gtk_tree_view_column_set_cell_data_func(column, renderer, memo_cell_data_function, NULL, NULL);
442
gtk_tree_view_column_set_resizable(column, TRUE);
443
//gtk_tree_view_column_add_attribute(column, renderer, "text", 2);
444
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
445
gtk_tree_view_column_set_alignment (column, 0.5);
446
gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST/2);
447
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
449
gtk_tree_view_column_set_fixed_width(column, PREFS->pnl_upc_col_mem_width);
452
column = gtk_tree_view_column_new();
453
gtk_tree_view_column_set_title(column, _("Expense"));
454
renderer = gtk_cell_renderer_text_new ();
455
g_object_set(renderer, "xalign", 1.0, NULL);
456
gtk_tree_view_column_pack_start(column, renderer, TRUE);
457
gtk_tree_view_column_set_cell_data_func(column, renderer, amount_cell_data_function, GINT_TO_POINTER(-1), NULL);
458
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
459
gtk_tree_view_column_set_alignment (column, 0.5);
460
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
463
column = gtk_tree_view_column_new();
464
gtk_tree_view_column_set_title(column, _("Income"));
465
renderer = gtk_cell_renderer_text_new ();
466
g_object_set(renderer, "xalign", 1.0, NULL);
467
gtk_tree_view_column_pack_start(column, renderer, TRUE);
468
gtk_tree_view_column_set_cell_data_func(column, renderer, amount_cell_data_function, GINT_TO_POINTER(1), NULL);
469
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
470
gtk_tree_view_column_set_alignment (column, 0.5);
471
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
473
/* column: Account */
474
renderer = gtk_cell_renderer_text_new ();
475
/*g_object_set(renderer,
476
"ellipsize", PANGO_ELLIPSIZE_END,
477
"ellipsize-set", TRUE,
480
column = gtk_tree_view_column_new();
481
g_object_set_data(G_OBJECT(column), "uid", GUINT_TO_POINTER(COL_DSPUPC_ACCOUNT));
482
gtk_tree_view_column_set_title(column, _("Account"));
483
gtk_tree_view_column_pack_start(column, renderer, TRUE);
484
gtk_tree_view_column_set_cell_data_func(column, renderer, account_cell_data_function, NULL, NULL);
485
gtk_tree_view_column_set_resizable(column, TRUE);
486
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
487
gtk_tree_view_column_set_alignment (column, 0.5);
488
//gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST);
489
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
493
column = gtk_tree_view_column_new();
494
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
496
gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), list_account_selectionfunc, NULL, NULL);
499
/* set initial sort order */
500
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), LST_DSPUPC_NEXT, GTK_SORT_ASCENDING);
503
g_signal_connect (view, "destroy", G_CALLBACK (list_upcoming_destroy), NULL);