1
/* HomeBank -- Free, easy, personal accounting for everyone.
2
* Copyright (C) 1995-2012 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_account.h"
25
/****************************************************************************/
27
/****************************************************************************/
36
/* our global datas */
37
extern struct HomeBank *GLOBALS;
38
extern struct Preferences *PREFS;
40
extern gchar *CYA_ACC_TYPE[]; //in ui_account.c
43
** draw some icons according to the stored data structure
46
status_cell_data_function (GtkTreeViewColumn *col,
47
GtkCellRenderer *renderer,
55
gtk_tree_model_get(model, iter,
56
LST_DSPACC_DATATYPE, &dt,
57
LST_DSPACC_DATAS, &acc,
60
if( dt == DSPACC_TYPE_NORMAL )
63
switch(GPOINTER_TO_INT(user_data))
66
g_object_set(renderer, "pixbuf", (acc->flags & AF_ADDED) ? GLOBALS->lst_pixbuf[LST_PIXBUF_ADD] : NULL, NULL);
69
g_object_set(renderer, "pixbuf", (acc->flags & AF_CHANGED) ? GLOBALS->lst_pixbuf[LST_PIXBUF_EDIT] : NULL, NULL);
74
g_object_set(renderer, "pixbuf", NULL, NULL);
78
** draw some text from the stored data structure
82
acc_type_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
87
gtk_tree_model_get(model, iter,
88
LST_DSPACC_DATATYPE, &dt,
89
LST_DSPACC_DATAS, &acc,
92
if( dt == DSPACC_TYPE_NORMAL && acc->type > 0 )
94
g_object_set(renderer, "text", _(CYA_ACC_TYPE[acc->type]), NULL);
97
g_object_set(renderer, "text", NULL, NULL);
102
** draw some text from the stored data structure
105
text_cell_data_function (GtkTreeViewColumn *col,
106
GtkCellRenderer *renderer,
115
gtk_tree_model_get(model, iter,
116
LST_DSPACC_DATATYPE, &dt,
117
LST_DSPACC_DATAS, &acc,
118
LST_DSPACC_NAME, &groupname,
121
if( dt == DSPACC_TYPE_NORMAL )
123
switch(GPOINTER_TO_INT(user_data))
126
g_object_set(renderer, "weight", PANGO_WEIGHT_NORMAL, "text", acc->name, NULL);
129
//g_object_set(renderer, "text", acc->number, NULL);
135
g_object_set(renderer,
136
"weight", PANGO_WEIGHT_BOLD,
142
float_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
145
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
151
gtk_tree_model_get(model, iter,
152
LST_DSPACC_DATATYPE, &dt,
153
LST_DSPACC_DATAS, &acc,
154
GPOINTER_TO_INT(user_data), &value, //LST_DSPACC_(BANK/TODAY/FUTURE)
157
if( dt == DSPACC_TYPE_HEADER )
162
tp = gtk_tree_model_get_path(model, iter);
163
expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(gtk_tree_view_column_get_tree_view(col)), tp);
167
//hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->kcur);
168
mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->minor);
169
color = get_normal_color_amount(value);
170
g_object_set(renderer,
171
"weight", PANGO_WEIGHT_NORMAL,
177
g_object_set(renderer, "text", NULL,
185
//kcur = acc != NULL ? acc->kcur : GLOBALS->kcur;
188
//mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->minor);
192
if(kcur != GLOBALS->kcur)
194
gdouble newval = amount_base_amount(value, kcur);
195
//g_print("currency=%d :: value='%.2f' newvalue='%.2f'\n", kcur, value, newval);
197
mystrfmoncurr(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->kcur);
201
//hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, kcur);
202
mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->minor);
205
weight = PANGO_WEIGHT_NORMAL;
207
if( dt == DSPACC_TYPE_NORMAL )
209
color = get_minimum_color_amount(value, acc->minimum);
213
color = get_normal_color_amount(value);
214
weight = PANGO_WEIGHT_BOLD;
217
//g_print("value='%.2f' buf='%s' color='%s'\n", value, buf, color);
219
g_object_set(renderer,
229
static GtkTreeViewColumn *amount_list_account_column(gchar *name, gint id)
231
GtkTreeViewColumn *column;
232
GtkCellRenderer *renderer;
234
column = gtk_tree_view_column_new();
235
gtk_tree_view_column_set_title(column, name);
237
renderer = gtk_cell_renderer_text_new ();
238
g_object_set(renderer, "xalign", 1.0, NULL);
239
gtk_tree_view_column_pack_start(column, renderer, TRUE);
240
gtk_tree_view_column_set_cell_data_func(column, renderer, float_cell_data_function, GINT_TO_POINTER(id), NULL);
241
//gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
242
gtk_tree_view_column_set_resizable(column, TRUE);
243
gtk_tree_view_column_set_alignment (column, 0.5);
244
gtk_tree_view_column_set_spacing( column, 16 );
245
//gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_BANK);
251
list_account_compare_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer userdata)
255
Account *entry1, *entry2;
256
//gchar *name1, *name2;
258
gtk_tree_model_get(model, a,
259
LST_DSPACC_DATATYPE, &dt1,
260
LST_DSPACC_DATAS, &entry1,
261
//LST_DSPACC_NAME, &name1,
263
gtk_tree_model_get(model, b,
264
LST_DSPACC_DATATYPE, &dt2,
265
LST_DSPACC_DATAS, &entry2,
266
//LST_DSPACC_NAME, &name2,
269
if( dt1 == DSPACC_TYPE_NORMAL && dt2 == DSPACC_TYPE_NORMAL )
271
result = entry1->pos - entry2->pos;
274
/* if( dt1 == DSPACC_TYPE_HEADER && dt2 == DSPACC_TYPE_HEADER )
276
result = g_utf8_collate(name1, name2);
287
gboolean list_account_selectionfunc(
288
GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data)
292
if( gtk_tree_path_get_depth( path ) < 2 )
295
if(gtk_tree_model_get_iter(model, &iter, path))
299
gtk_tree_model_get(model, &iter,
300
LST_DSPACC_DATATYPE, &dt,
303
if( dt != DSPACC_TYPE_NORMAL )
311
GtkWidget *create_list_account(void)
315
GtkCellRenderer *renderer;
316
GtkTreeViewColumn *column;
318
/* create list store */
319
store = gtk_tree_store_new(
322
G_TYPE_INT, /* datatype */
323
G_TYPE_INT, /* fake: status */
324
G_TYPE_STRING, /* fake: name */
331
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
332
g_object_unref(store);
334
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), PREFS->rules_hint);
335
//gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
336
// COLUMN_DESCRIPTION);
338
gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_SINGLE);
341
column = gtk_tree_view_column_new();
342
gtk_tree_view_column_set_title(column, _("Status"));
344
renderer = gtk_cell_renderer_pixbuf_new ();
345
gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
346
gtk_tree_view_column_pack_start(column, renderer, TRUE);
347
gtk_tree_view_column_set_cell_data_func(column, renderer, status_cell_data_function, GINT_TO_POINTER(1), NULL);
349
renderer = gtk_cell_renderer_pixbuf_new ();
350
gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
351
gtk_tree_view_column_pack_start(column, renderer, TRUE);
352
gtk_tree_view_column_set_cell_data_func(column, renderer, status_cell_data_function, GINT_TO_POINTER(2), NULL);
354
gtk_tree_view_column_set_alignment (column, 0.5);
355
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
358
column = gtk_tree_view_column_new();
359
gtk_tree_view_column_set_title(column, _("Accounts"));
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, text_cell_data_function, GINT_TO_POINTER(1), NULL);
364
gtk_tree_view_column_set_resizable(column, TRUE);
365
gtk_tree_view_column_set_alignment (column, 0.5);
367
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
369
gtk_tree_view_set_expander_column(GTK_TREE_VIEW (view), column);
376
column = amount_list_account_column(_("Bank"), LST_DSPACC_BANK);
377
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
381
column = amount_list_account_column(_("Today"), LST_DSPACC_TODAY);
382
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
386
column = amount_list_account_column(_("Future"), LST_DSPACC_FUTURE);
387
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
389
/* column 7: empty */
390
column = gtk_tree_view_column_new();
391
gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
394
/* disbale selection for level 1 of the tree */
396
gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), list_account_selectionfunc, NULL, NULL);
399
gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(store), list_account_compare_func, NULL, NULL);
400
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);