]> Dogcows Code - chaz/homebank/blobdiff - src/list_account.c
import homebank-5.1.7
[chaz/homebank] / src / list_account.c
index 3e4fb824f5926bb694d365e12c6908096ec972de..7f20090dda35d8d05e618e11c469b19f5745d137 100644 (file)
@@ -1,5 +1,5 @@
 /*  HomeBank -- Free, easy, personal accounting for everyone.
- *  Copyright (C) 1995-2014 Maxime DOYEN
+ *  Copyright (C) 1995-2018 Maxime DOYEN
  *
  *  This file is part of HomeBank.
  *
@@ -50,6 +50,7 @@ status_cell_data_function (GtkTreeViewColumn *col,
                            gpointer           user_data)
 {
 Account *acc;
+gchar *iconname = NULL;
 gint dt;
 
        gtk_tree_model_get(model, iter, 
@@ -63,15 +64,18 @@ gint dt;
                switch(GPOINTER_TO_INT(user_data))
                {
                        case 1:
-                               g_object_set(renderer, "pixbuf", (acc->flags & AF_ADDED) ? GLOBALS->lst_pixbuf[LST_PIXBUF_ADD] : NULL, NULL);
+                               iconname = (acc->flags & AF_ADDED) ? ICONNAME_NEW : NULL;
+                               // override if closed account
+                               if( acc->flags & AF_CLOSED )
+                                       iconname = ICONNAME_CHANGES_PREVENT;
                                break;
                        case 2:
-                               g_object_set(renderer, "pixbuf", (acc->flags & AF_CHANGED) ? GLOBALS->lst_pixbuf[LST_PIXBUF_EDIT] : NULL, NULL);
+                               iconname = (acc->flags & AF_CHANGED) ? ICONNAME_HB_OPE_EDIT : NULL;
                                break;
                }
        }
-       else
-               g_object_set(renderer, "pixbuf", NULL, NULL);
+
+       g_object_set(renderer, "icon-name", iconname, NULL);
 }
 
 /*
@@ -136,8 +140,12 @@ gchar *groupname;
                    "weight", PANGO_WEIGHT_BOLD,
                    "text", groupname, 
                    NULL);
+
+       //leak
+       g_free(groupname);
 }
 
+
 static void
 float_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
@@ -154,6 +162,8 @@ gchar *color;
                GPOINTER_TO_INT(user_data), &value,             //LST_DSPACC_(BANK/TODAY/FUTURE)
                -1);
 
+       guint32 kcur = (acc != NULL) ? acc->kcur : GLOBALS->kcur;
+       
        if( dt == DSPACC_TYPE_HEADER )
        {
        gboolean expanded;
@@ -162,10 +172,12 @@ gchar *color;
                tp = gtk_tree_model_get_path(model, iter);
                expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(gtk_tree_view_column_get_tree_view(col)), tp);
        
+               //leak
+               gtk_tree_path_free(tp);
+       
                if(!expanded)
                {
-                       //hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->kcur);
-                       mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->minor);
+                       hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, kcur, GLOBALS->minor);
                        color = get_normal_color_amount(value);
                        g_object_set(renderer,
                            "weight", PANGO_WEIGHT_NORMAL,
@@ -176,31 +188,12 @@ gchar *color;
                else
                        g_object_set(renderer, "text", NULL, 
                    NULL);
-                       
-               
+       
        }
        else
        {
-               // prevent errors
-               //kcur = acc != NULL ? acc->kcur : GLOBALS->kcur;
-
-               //original
-               //mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->minor);
+               hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, kcur, GLOBALS->minor);
 
-               //base test
-               /*
-               if(kcur != GLOBALS->kcur)
-               {
-                       gdouble newval = amount_base_amount(value, kcur);
-                       //g_print("currency=%d :: value='%.2f' newvalue='%.2f'\n", kcur, value, newval);
-                       value = newval;
-                       mystrfmoncurr(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->kcur);
-               }
-               else*/
-               
-               //hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, kcur);
-               mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, value, GLOBALS->minor);
-               
                color = NULL;
                weight = PANGO_WEIGHT_NORMAL;
 
@@ -238,8 +231,7 @@ GtkCellRenderer    *renderer;
        g_object_set(renderer, "xalign", 1.0, NULL);
        gtk_tree_view_column_pack_start(column, renderer, TRUE);
        gtk_tree_view_column_set_cell_data_func(column, renderer, float_cell_data_function, GINT_TO_POINTER(id), NULL);
-       //gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-       gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
        gtk_tree_view_column_set_alignment (column, 0.5);
        gtk_tree_view_column_set_spacing( column, 16 );
        //gtk_tree_view_column_set_sort_column_id (column, LST_DSPACC_BANK);
@@ -253,23 +245,36 @@ list_account_compare_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
 gint retval = 0;
 gint dt1, dt2;
 Account *entry1, *entry2;
-//gchar *name1, *name2;
+gchar *name1, *name2;
+gint pos1, pos2;
 
     gtk_tree_model_get(model, a, 
+               LST_DSPACC_POS, &pos1,
        LST_DSPACC_DATATYPE, &dt1, 
        LST_DSPACC_DATAS, &entry1,
-       //LST_DSPACC_NAME, &name1,
+       LST_DSPACC_NAME, &name1,
        -1);
     gtk_tree_model_get(model, b, 
+               LST_DSPACC_POS, &pos2,
        LST_DSPACC_DATATYPE, &dt2, 
        LST_DSPACC_DATAS, &entry2,
-       //LST_DSPACC_NAME, &name2,
+       LST_DSPACC_NAME, &name2,
        -1);
 
        if( dt1 == DSPACC_TYPE_NORMAL && dt2 == DSPACC_TYPE_NORMAL )
        {
                retval = entry1->pos - entry2->pos;
        }
+       else
+       if( dt1 == DSPACC_TYPE_HEADER && dt2 == DSPACC_TYPE_HEADER )
+       {
+               retval = pos1 - pos2;
+               if( !retval )
+                       retval = hb_string_utf8_compare(name1, name2);
+       }
+
+       g_free(name2);
+       g_free(name1);
 
     return retval;
 }
@@ -303,6 +308,21 @@ GtkTreeIter iter;
 }
 
 
+static void list_account_destroy(GtkTreeView *treeview, gpointer user_data)
+{
+GtkTreeViewColumn  *column;
+
+       DB( g_print ("\n[list_account] destroy\n") );
+
+       //todo: unsafe to use direct column index
+       column = gtk_tree_view_get_column(treeview, LST_DSPACC_NAME);
+       if( column )
+       {
+               PREFS->pnl_acc_col_acc_width = gtk_tree_view_column_get_width(column);
+       }
+}
+
+
 GtkWidget *create_list_account(void)
 {
 GtkTreeStore *store;
@@ -310,39 +330,41 @@ GtkWidget *view;
 GtkCellRenderer    *renderer;
 GtkTreeViewColumn  *column;
 
+       DB( g_print ("\n[list_account] create\n") );
+
        /* create list store */
        store = gtk_tree_store_new(
                NUM_LST_DSPACC,
-               G_TYPE_POINTER,
-               G_TYPE_INT,             /* datatype */
                G_TYPE_INT,             /* fake: status */
                G_TYPE_STRING,  /* fake: name */
                G_TYPE_DOUBLE,
                G_TYPE_DOUBLE,
-               G_TYPE_DOUBLE
+               G_TYPE_DOUBLE,
+               G_TYPE_POINTER, /* datas*/
+               G_TYPE_INT              /* datatype */
                );
 
        //treeview
        view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
        g_object_unref(store);
 
-       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), PREFS->rules_hint);
+       gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (view), PREFS->grid_lines);
        //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
        //                             COLUMN_DESCRIPTION);
 
+       //gtk_tree_view_set_enable_tree_lines(GTK_TREE_VIEW (view), TRUE);
+
        gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_SINGLE);
 
     /* Status */
        column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Status"));
+    //gtk_tree_view_column_set_title(column, _("Status"));
 
     renderer = gtk_cell_renderer_pixbuf_new ();
-       gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
     gtk_tree_view_column_pack_start(column, renderer, TRUE);
     gtk_tree_view_column_set_cell_data_func(column, renderer, status_cell_data_function, GINT_TO_POINTER(1), NULL);
 
     renderer = gtk_cell_renderer_pixbuf_new ();
-       gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
     gtk_tree_view_column_pack_start(column, renderer, TRUE);
     gtk_tree_view_column_set_cell_data_func(column, renderer, status_cell_data_function, GINT_TO_POINTER(2), NULL);
 
@@ -350,33 +372,32 @@ GtkTreeViewColumn  *column;
     gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
 
        /* Account */
-       column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _("Accounts"));
-       
        renderer = gtk_cell_renderer_text_new ();
+       g_object_set(renderer, 
+               "ellipsize", PANGO_ELLIPSIZE_END,
+               "ellipsize-set", TRUE,
+               NULL);
+
+       column = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_title(column, _("Accounts"));
        gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, text_cell_data_function, GINT_TO_POINTER(1), NULL);
-       gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, text_cell_data_function, GINT_TO_POINTER(LST_DSPACC_NAME), NULL);
        gtk_tree_view_column_set_alignment (column, 0.5);
-
+       gtk_tree_view_column_set_min_width(column, HB_MINWIDTH_LIST/2);
+       gtk_tree_view_column_set_resizable(column, TRUE);
        gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
 
+       gtk_tree_view_column_set_fixed_width(column, PREFS->pnl_acc_col_acc_width);
        gtk_tree_view_set_expander_column(GTK_TREE_VIEW (view), column);
 
-
-
-
-
     /* Bank */
        column = amount_list_account_column(_("Bank"), LST_DSPACC_BANK);
        gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
 
-
     /* Today */
        column = amount_list_account_column(_("Today"), LST_DSPACC_TODAY);
        gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
 
-
     /* Future */
        column = amount_list_account_column(_("Future"), LST_DSPACC_FUTURE);
        gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
@@ -394,6 +415,7 @@ GtkTreeViewColumn  *column;
        gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(store), list_account_compare_func, NULL, NULL);
        gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
 
+       g_signal_connect (view, "destroy", G_CALLBACK (list_account_destroy), NULL);
 
        return(view);
 }
This page took 0.023606 seconds and 4 git commands to generate.