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