1 /* HomeBank -- Free, easy, personal accounting for everyone.
2 * Copyright (C) 1995-2014 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
,
38 gtk_tree_model_get(model
, iter
,
39 LST_DSPUPC_NB_LATE
, &nblate
,
44 g_object_set(renderer
, "pixbuf", GLOBALS
->lst_pixbuf
[LST_PIXBUF_WARNING
], NULL
, NULL
);
47 g_object_set(renderer
, "pixbuf", NULL
, NULL
);
54 ** remaining cell function
56 static void sched_latetext_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
64 gtk_tree_model_get(model
, iter
,
65 LST_DSPUPC_DATAS
, &arc
,
66 LST_DSPUPC_NB_LATE
, &nblate
,
71 markuptxt
= g_strdup_printf(nblate
< 10 ? "%d" : "+10", nblate
);
74 //weight = PANGO_WEIGHT_NORMAL;
76 if(nblate
> 0 && PREFS
->custom_colors
== TRUE
)
78 color
= PREFS
->color_warn
;
81 g_object_set(renderer
,
90 g_object_set(renderer
, "text", NULL
, NULL
);
95 ** remaining cell function
98 /*static void remaining_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
104 gtk_tree_model_get(model, iter,
105 LST_DSPUPC_DATAS, &arc,
106 LST_DSPUPC_REMAINING, &remaining,
109 if(arc && remaining > 0)
111 markuptxt = g_strdup_printf("%d", remaining);
112 g_object_set(renderer, "markup", markuptxt, NULL);
116 g_object_set(renderer, "text", NULL, NULL);
122 ** date cell function
124 static void date_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
130 gtk_tree_model_get(model
, iter
,
131 LST_DSPUPC_DATAS
, &arc
,
136 date
= g_date_new_julian (arc
->nextdate
);
137 g_date_strftime (buffer
, 256-1, PREFS
->date_format
, date
);
140 //g_snprintf(buf, sizeof(buf), "%d", ope->ope_Date);
142 g_object_set(renderer
, "text", buffer
, NULL
);
146 g_object_set(renderer
, "text", NULL
, NULL
);
151 ** payee cell function
153 static void payee_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
158 gtk_tree_model_get(model
, iter
,
159 LST_DSPUPC_DATAS
, &arc
,
165 pay
= da_pay_get(arc
->kpay
);
168 g_object_set(renderer
, "text", pay
->name
, NULL
);
171 g_object_set(renderer
, "text", NULL
, NULL
);
176 ** wording cell function
178 static void wording_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
184 gtk_tree_model_get(model
, iter
,
185 LST_DSPUPC_DATAS
, &arc
,
186 LST_DSPUPC_WORDING
, &txt
,
189 weight
= arc
== NULL
? PANGO_WEIGHT_BOLD
: PANGO_WEIGHT_NORMAL
;
191 g_object_set(renderer
, "weight", weight
, "text", txt
, NULL
);
197 ** amount cell function
199 static void amount_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
202 gdouble expense
, income
, amount
;
203 gchar buf
[G_ASCII_DTOSTR_BUF_SIZE
];
204 gint column
= GPOINTER_TO_INT(user_data
);
208 gtk_tree_model_get(model
, iter
,
209 LST_DSPUPC_DATAS
, &arc
,
210 LST_DSPUPC_EXPENSE
, &expense
,
211 LST_DSPUPC_INCOME
, &income
,
214 amount
= column
== -1 ? expense
: income
;
218 //hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, amount, kcur);
219 mystrfmon(buf
, G_ASCII_DTOSTR_BUF_SIZE
-1, amount
, GLOBALS
->minor
);
220 color
= get_normal_color_amount(amount
);
222 weight
= arc
== NULL
? PANGO_WEIGHT_BOLD
: PANGO_WEIGHT_NORMAL
;
224 g_object_set(renderer
,
232 g_object_set(renderer
, "text", NULL
, NULL
);
238 ** account cell function
240 static void account_cell_data_function (GtkTreeViewColumn
*col
, GtkCellRenderer
*renderer
, GtkTreeModel
*model
, GtkTreeIter
*iter
, gpointer user_data
)
246 gtk_tree_model_get(model
, iter
, LST_DSPUPC_DATAS
, &arc
, -1);
249 acc
= da_acc_get(arc
->kacc
);
256 g_object_set(renderer
, "text", name
, NULL
);
262 gboolean
list_account_selectionfunc(
263 GtkTreeSelection
*selection
, GtkTreeModel
*model
, GtkTreePath
*path
, gboolean path_currently_selected
, gpointer data
)
268 if(gtk_tree_model_get_iter(model
, &iter
, path
))
270 gtk_tree_model_get(model
, &iter
,
271 LST_DSPUPC_DATAS
, &arc
,
283 GtkWidget
*create_list_upcoming(void)
287 GtkCellRenderer
*renderer
;
288 GtkTreeViewColumn
*column
;
290 /* create list store */
291 store
= gtk_list_store_new(
294 G_TYPE_BOOLEAN
, /* payee */
295 G_TYPE_STRING
, /* wording */
296 G_TYPE_DOUBLE
, /* expense */
297 G_TYPE_DOUBLE
, /* income */
298 G_TYPE_BOOLEAN
, /* account */
299 G_TYPE_BOOLEAN
, /* next on */
300 G_TYPE_INT
, /* remaining */
301 G_TYPE_INT
/* nb late */
305 view
= gtk_tree_view_new_with_model(GTK_TREE_MODEL(store
));
306 g_object_unref(store
);
308 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view
), PREFS
->rules_hint
);
309 //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
310 // COLUMN_DESCRIPTION);
312 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view
)), GTK_SELECTION_SINGLE
);
315 column
= gtk_tree_view_column_new();
316 gtk_tree_view_column_set_title(column
, _("Late"));
318 renderer
= gtk_cell_renderer_pixbuf_new ();
319 gtk_cell_renderer_set_fixed_size(renderer
, GLOBALS
->lst_pixbuf_maxwidth
, -1);
320 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
321 gtk_tree_view_column_set_cell_data_func(column
, renderer
, sched_lateicon_cell_data_function
, NULL
, NULL
);
323 renderer
= gtk_cell_renderer_text_new ();
324 g_object_set(renderer
, "xalign", 1.0, NULL
);
325 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
326 gtk_tree_view_column_set_cell_data_func(column
, renderer
, sched_latetext_cell_data_function
, NULL
, NULL
);
328 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_NB_LATE);
329 //gtk_tree_view_column_set_resizable(column, TRUE);
330 gtk_tree_view_column_set_alignment (column
, 0.5);
331 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
333 /* column : Remaining */
334 /*column = gtk_tree_view_column_new();
335 gtk_tree_view_column_set_title(column, _("In"));
337 renderer = gtk_cell_renderer_text_new ();
338 g_object_set(renderer, "xalign", 1.0, NULL);
339 gtk_tree_view_column_pack_start(column, renderer, TRUE);
340 gtk_tree_view_column_set_cell_data_func(column, renderer, remaining_cell_data_function, NULL, NULL);
341 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_REMAINING);
342 //gtk_tree_view_column_set_resizable(column, TRUE);
343 gtk_tree_view_column_set_alignment (column, 0.5);
344 gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
347 /* column: Next on */
348 column
= gtk_tree_view_column_new();
349 gtk_tree_view_column_set_title(column
, _("Next date"));
350 renderer
= gtk_cell_renderer_text_new ();
351 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
352 gtk_tree_view_column_set_cell_data_func(column
, renderer
, date_cell_data_function
, NULL
, NULL
);
353 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPUPC_DATE);
354 gtk_tree_view_column_set_resizable(column
, TRUE
);
355 gtk_tree_view_column_set_alignment (column
, 0.5);
356 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
359 column
= gtk_tree_view_column_new();
360 gtk_tree_view_column_set_title(column
, _("Payee"));
361 renderer
= gtk_cell_renderer_text_new ();
362 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
363 gtk_tree_view_column_set_cell_data_func(column
, renderer
, payee_cell_data_function
, NULL
, NULL
);
364 //gtk_tree_view_column_add_attribute(column, renderer, "text", 1);
365 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
366 gtk_tree_view_column_set_resizable(column
, TRUE
);
367 gtk_tree_view_column_set_alignment (column
, 0.5);
368 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
370 /* column: Wording */
371 column
= gtk_tree_view_column_new();
372 gtk_tree_view_column_set_title(column
, _("Memo"));
373 renderer
= gtk_cell_renderer_text_new ();
374 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
375 gtk_tree_view_column_set_cell_data_func(column
, renderer
, wording_cell_data_function
, NULL
, NULL
);
376 //gtk_tree_view_column_add_attribute(column, renderer, "text", 2);
377 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
378 gtk_tree_view_column_set_resizable(column
, TRUE
);
379 gtk_tree_view_column_set_alignment (column
, 0.5);
380 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
383 column
= gtk_tree_view_column_new();
384 gtk_tree_view_column_set_title(column
, _("Expense"));
385 renderer
= gtk_cell_renderer_text_new ();
386 g_object_set(renderer
, "xalign", 1.0, NULL
);
387 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
388 gtk_tree_view_column_set_cell_data_func(column
, renderer
, amount_cell_data_function
, GINT_TO_POINTER(-1), NULL
);
389 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
390 gtk_tree_view_column_set_resizable(column
, TRUE
);
391 gtk_tree_view_column_set_alignment (column
, 0.5);
392 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
395 column
= gtk_tree_view_column_new();
396 gtk_tree_view_column_set_title(column
, _("Income"));
397 renderer
= gtk_cell_renderer_text_new ();
398 g_object_set(renderer
, "xalign", 1.0, NULL
);
399 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
400 gtk_tree_view_column_set_cell_data_func(column
, renderer
, amount_cell_data_function
, GINT_TO_POINTER(1), NULL
);
401 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_NAME);
402 gtk_tree_view_column_set_resizable(column
, TRUE
);
403 gtk_tree_view_column_set_alignment (column
, 0.5);
404 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
406 /* column: Account */
407 column
= gtk_tree_view_column_new();
408 gtk_tree_view_column_set_title(column
, _("Account"));
409 renderer
= gtk_cell_renderer_text_new ();
410 g_object_set(renderer
, "xalign", 1.0, NULL
);
411 gtk_tree_view_column_pack_start(column
, renderer
, TRUE
);
412 gtk_tree_view_column_set_cell_data_func(column
, renderer
, account_cell_data_function
, NULL
, NULL
);
413 //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
414 gtk_tree_view_column_set_resizable(column
, TRUE
);
415 gtk_tree_view_column_set_alignment (column
, 0.5);
416 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
423 column
= gtk_tree_view_column_new();
424 gtk_tree_view_append_column (GTK_TREE_VIEW(view
), column
);
426 gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(view
)), list_account_selectionfunc
, NULL
, NULL
);
429 /* set initial sort order */
430 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store
), LST_DSPUPC_REMAINING
, GTK_SORT_ASCENDING
);