]> Dogcows Code - chaz/homebank/blobdiff - src/list_operation.c
import homebank-5.1.2
[chaz/homebank] / src / list_operation.c
index 14ced53b0c3218d84eec8bf8131ee65b21ce8712..9b05b5d3d5fbcf7bca2ee0920067edb56e93c550 100644 (file)
@@ -1,5 +1,5 @@
 /*  HomeBank -- Free, easy, personal accounting for everyone.
- *  Copyright (C) 1995-2014 Maxime DOYEN
+ *  Copyright (C) 1995-2016 Maxime DOYEN
  *
  *  This file is part of HomeBank.
  *
@@ -38,21 +38,39 @@ extern struct HomeBank *GLOBALS;
 extern struct Preferences *PREFS;
 
 
+
+gchar *list_txn_column_label[] = {
+       "----", //datas
+       "----", //status
+       "----", //date
+       N_("Info"    ),
+       N_("Payee"   ),
+       N_("Memo"    ),
+       N_("Amount"  ),
+       N_("Expense" ),
+       N_("Income"  ),
+       N_("Category"),
+       N_("Tags"    ),
+       N_("Balance" ),
+       N_("Status"),
+       NULL
+};
+
+
 //debug
 //extern gboolean minor_active;
-extern GdkPixbuf *paymode_icons[];
 
 /* This is not pretty. Of course you can also use a
    *  separate compare function for each sort ID value */
 
-static gint ope_sort_iter_compare_strings(gchar *s1, gchar *s2)
+static gint list_txn_sort_iter_compare_strings(gchar *s1, gchar *s2)
 {
        return hb_string_utf8_compare(s1, s2);
 }
 
 
 static   gint
-  ope_sort_iter_compare_func (GtkTreeModel *model,
+  list_txn_sort_iter_compare_func (GtkTreeModel *model,
                           GtkTreeIter  *a,
                           GtkTreeIter  *b,
                           gpointer      userdata)
@@ -68,9 +86,9 @@ static   gint
     switch (sortcol)
     {
                case LST_DSPOPE_STATUS:
-                       if(!(retval = (ope1->flags & OF_VALID) - (ope2->flags & OF_VALID) ) )
+                       if(!(retval = (ope1->flags & OF_ADDED) - (ope2->flags & OF_ADDED) ) )
                        {
-                               retval = (ope1->flags & OF_REMIND) - (ope2->flags & OF_REMIND);
+                               retval = (ope1->flags & OF_CHANGED) - (ope2->flags & OF_CHANGED);
                        }
                        break;
 
@@ -93,7 +111,7 @@ static   gint
                                a2 = da_acc_get(ope2->kacc);
                                if( a1 != NULL && a2 != NULL )
                                {
-                                       retval = ope_sort_iter_compare_strings(a1->name, a2->name);
+                                       retval = list_txn_sort_iter_compare_strings(a1->name, a2->name);
                                }
                        }
                        break;
@@ -101,7 +119,7 @@ static   gint
                case LST_DSPOPE_INFO:
                        if(!(retval = ope1->paymode - ope2->paymode))
                        {
-                               retval = ope_sort_iter_compare_strings(ope1->info, ope2->info);
+                               retval = list_txn_sort_iter_compare_strings(ope1->info, ope2->info);
                        }
                        break;
 
@@ -113,13 +131,17 @@ static   gint
                                p2 = da_pay_get(ope2->kpay);
                                if( p1 != NULL && p2 != NULL )
                                {
-                                       retval = ope_sort_iter_compare_strings(p1->name, p2->name);
+                                       retval = list_txn_sort_iter_compare_strings(p1->name, p2->name);
                                }
                        }
                        break;
 
                case LST_DSPOPE_WORDING:
-                               retval = ope_sort_iter_compare_strings(ope1->wording, ope2->wording);
+                               retval = list_txn_sort_iter_compare_strings(ope1->wording, ope2->wording);
+                       break;
+
+               case LST_DSPOPE_CLR:
+                       retval = ope1->status - ope2->status;
                        break;
 
                case LST_DSPOPE_AMOUNT:
@@ -140,7 +162,7 @@ static   gint
                                {
                                        name1 = da_cat_get_fullname(c1);
                                        name2 = da_cat_get_fullname(c2);
-                                       retval = ope_sort_iter_compare_strings(name1, name2);
+                                       retval = list_txn_sort_iter_compare_strings(name1, name2);
                                        g_free(name2);
                                        g_free(name1);
                                }
@@ -153,7 +175,7 @@ static   gint
 
                        t1 = transaction_tags_tostring(ope1);
                        t2 = transaction_tags_tostring(ope2);
-                       retval = ope_sort_iter_compare_strings(t1, t2);
+                       retval = list_txn_sort_iter_compare_strings(t1, t2);
                        g_free(t1);
                        g_free(t2);
                }
@@ -166,13 +188,46 @@ static   gint
     return retval;
 }
 
+static void list_txn_eval_future(GtkCellRenderer *renderer, Transaction *txn)
+{
+       
+       //it seems we are not able to get a valid GdkRGBA
+       //nor to set/use the alpha
+       /*GdkRGBA *rgba;        
+       g_object_get(renderer, "foreground-rgba", &rgba, NULL);
+       g_print("forcol: %p %f %f %f %f\n", rgba, rgba->red, rgba->green, rgba->blue, rgba->alpha);
+       rgba->red = 1.0;
+       rgba->alpha = 0.1;
+       g_object_set(renderer, "foreground-set", TRUE, 
+               "foreground-rgba", rgba,
+       NULL);
+       gdk_rgba_free(rgba);
+       */
+
+       if(txn->date > GLOBALS->today)
+       {
+               g_object_set(renderer, 
+                       "scale-set", TRUE, 
+                       "scale", 0.8,
+                       "style-set", TRUE,
+                       "style",        PANGO_STYLE_OBLIQUE,
+               NULL);
+       }
+       else
+       {
+               g_object_set(renderer, "scale-set", FALSE, "style-set", FALSE,
+               NULL);
+       }
+}
+
+
 /*
 ** date cell function
 */
-static void ope_status_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_status_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *entry;
-GdkPixbuf *pixbuf = NULL;
+gchar *iconname = NULL;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &entry, -1);
 
@@ -186,29 +241,29 @@ GdkPixbuf *pixbuf = NULL;
        switch(GPOINTER_TO_INT(user_data))
        {
                case 1:
-                       pixbuf = ( entry->flags & OF_AUTO  ) ? GLOBALS->lst_pixbuf[LST_PIXBUF_AUTO] : ( entry->flags & OF_ADDED ) ? GLOBALS->lst_pixbuf[LST_PIXBUF_ADD] : NULL;
+                       iconname = ( entry->flags & OF_AUTO  ) ? ICONNAME_HB_OPE_AUTO : ( entry->flags & OF_ADDED ) ? ICONNAME_NEW : NULL;
                        break;
                case 2:
-                       pixbuf = ( entry->flags & OF_CHANGED  ) ? GLOBALS->lst_pixbuf[LST_PIXBUF_EDIT] : NULL;
+                       iconname = ( entry->flags & OF_CHANGED  ) ? ICONNAME_HB_OPE_EDIT : NULL;
                        break;
-               case 3:
+               /*case 3:
                        if( entry->flags & OF_VALID )
-                               pixbuf = GLOBALS->lst_pixbuf[LST_PIXBUF_VALID];
+                               iconname = ICONNAME_HB_OPE_VALID;
                        else
                        {
                                if( entry->flags & OF_REMIND )
-                                       pixbuf = GLOBALS->lst_pixbuf[LST_PIXBUF_REMIND];
+                                       iconname = ICONNAME_HB_OPE_REMIND;
                        }
-                       break;
+                       break;*/
        }
-       g_object_set(renderer, "pixbuf", pixbuf, NULL);
+       g_object_set(renderer, "icon-name", iconname, NULL);
 }
 
 
 /*
 ** account cell function
 */
-static void ope_account_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_account_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 Account *acc;
@@ -227,19 +282,19 @@ Account *acc;
 /*
 ** date cell function
 */
-static void ope_date_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_date_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 gchar buffer[256];
-GDate *date;
+GDate date;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       list_txn_eval_future(renderer, ope);
 
        if(ope->date > 0)
        {
-               date = g_date_new_julian (ope->date);
-               g_date_strftime (buffer, 256-1, PREFS->date_format, date);
-               g_date_free(date);
+               g_date_set_julian (&date, ope->date);
+               g_date_strftime (buffer, 256-1, PREFS->date_format, &date);
 
                //g_snprintf(buf, sizeof(buf), "%d", ope->ope_Date);
 
@@ -252,7 +307,7 @@ GDate *date;
 /*
 ** info cell function
 */
-static void ope_info_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_info_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 
@@ -261,10 +316,11 @@ Transaction *ope;
        switch(GPOINTER_TO_INT(user_data))
        {
                case 1:
-                       g_object_set(renderer, "pixbuf", paymode_icons[ope->paymode], NULL);
+                       g_object_set(renderer, "icon-name", get_paymode_icon_name(ope->paymode), NULL);
                        break;
                case 2:
-                   g_object_set(renderer, "text", ope->info, NULL);
+                       list_txn_eval_future(renderer, ope);
+                       g_object_set(renderer, "text", ope->info, NULL);
                        break;
        }
 }
@@ -272,29 +328,38 @@ Transaction *ope;
 /*
 ** payee cell function
 */
-static void ope_payee_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_payee_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
-Payee *pay;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       list_txn_eval_future(renderer, ope);
 
-       pay = da_pay_get(ope->kpay);
-       if(pay != NULL)
-               g_object_set(renderer, "text", pay->name, NULL);
+       //#926782
+       if(ope->paymode == PAYMODE_INTXFER)
+       {
+       Account *acc = da_acc_get(ope->kxferacc);
+               
+               g_object_set(renderer, "text", (acc != NULL) ? acc->name : "", NULL);
+       }
        else
-               g_object_set(renderer, "text", "", NULL);
+       {
+       Payee *pay = da_pay_get(ope->kpay);
+               
+               g_object_set(renderer, "text", pay != NULL ? pay->name : "", NULL);
+       }
 }
 
 /*
 ** tags cell function
 */
-static void ope_tags_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_tags_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 gchar *str;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       list_txn_eval_future(renderer, ope);
 
        if(ope->tags != NULL)
        {
@@ -312,18 +377,48 @@ gchar *str;
 /*
 ** wording cell function
 */
-static void ope_wording_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_wording_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       list_txn_eval_future(renderer, ope);
+       
     g_object_set(renderer, "text", ope->wording, NULL);
 }
 
+
+/*
+** clr cell function
+*/
+static void list_txn_clr_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+Transaction *ope;
+gchar *iconname = NULL;
+//const gchar *c = "";
+       
+       gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       switch(ope->status)
+       {
+               /*case TXN_STATUS_CLEARED: c = "c"; break;
+               case TXN_STATUS_RECONCILED: c = "R"; break;
+               case TXN_STATUS_REMIND: c = "!"; break;*/
+               case TXN_STATUS_CLEARED:        iconname = ICONNAME_HB_OPE_CLEARED; break;
+               case TXN_STATUS_RECONCILED: iconname = ICONNAME_HB_OPE_RECONCILED; break;
+               case TXN_STATUS_REMIND:     iconname = ICONNAME_HB_OPE_REMIND; break;
+               
+       }
+
+       //g_object_set(renderer, "text", c, NULL);
+       g_object_set(renderer, "icon-name", iconname, NULL);
+       
+}
+
+
 /*
 ** amount cell function
 */
-static void ope_amount_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_amount_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 gint column = GPOINTER_TO_INT(user_data);
@@ -334,12 +429,13 @@ gchar *color;
 
        // get the transaction
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       list_txn_eval_future(renderer, ope);
+
        if(column == LST_DSPOPE_BALANCE)
                amount = ope->balance;
        else
                amount = ope->amount;
 
-
        if(column == LST_DSPOPE_INCOME || column == LST_DSPOPE_EXPENSE)
        {
                type = (ope->flags & OF_INCOME) ? LST_DSPOPE_INCOME : LST_DSPOPE_EXPENSE;
@@ -351,21 +447,15 @@ gchar *color;
        }
 
        //if(amount != 0)
-       {
-               //mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, ope->amount, GLOBALS->minor);
-
-               //todo: optimize this
-               //store to a data set to the listview
-               //acc = da_acc_get(ope->kacc);
-               //hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, ope->amount, acc->kcur);
-               mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, amount, GLOBALS->minor);
+       //{
+               hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, amount, ope->kcur, GLOBALS->minor);
                color = get_normal_color_amount(amount);
 
                g_object_set(renderer,
                        "foreground",  color,
                        "text", buf,
                        NULL);
-       }
+       //}
 
        
 }
@@ -374,15 +464,16 @@ gchar *color;
 /*
 ** category cell function
 */
-static void ope_category_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+static void list_txn_category_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
 Category *cat;
 gchar *fullname;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
+       list_txn_eval_future(renderer, ope);
 
-       if(ope->flags &OF_SPLIT)
+       if(ope->flags & OF_SPLIT)
        {
                g_object_set(renderer, "text", _("- split -"), NULL);
        }
@@ -403,138 +494,31 @@ gchar *fullname;
 }
 
 
-
-
-/* column 3: Infos */
-static GtkTreeViewColumn *info_list_transaction_column()
-{
-GtkTreeViewColumn  *column;
-GtkCellRenderer    *renderer;
-
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Info"));
-
-       renderer = gtk_cell_renderer_pixbuf_new ();
-       gtk_tree_view_column_pack_start(column, renderer, FALSE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_info_cell_data_function, GINT_TO_POINTER(1), NULL);
-
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_info_cell_data_function, GINT_TO_POINTER(2), NULL);
-       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_INFO);
-
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_column_set_reorderable(column, TRUE);
-       gtk_tree_view_column_set_alignment (column, 0.5);
-
-       return column;
-}
-
-
-/* column 4: Payee */
-static GtkTreeViewColumn *payee_list_transaction_column()
-{
-GtkTreeViewColumn  *column;
-GtkCellRenderer    *renderer;
-
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Payee"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_payee_cell_data_function, NULL, NULL);
-       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_PAYEE);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_column_set_reorderable(column, TRUE);
-       gtk_tree_view_column_set_alignment (column, 0.5);
-
-       return column;
-}
-
-/* column 5: Wording */
-static GtkTreeViewColumn *wording_list_transaction_column()
-{
-GtkTreeViewColumn  *column;
-GtkCellRenderer    *renderer;
-
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Memo"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_wording_cell_data_function, NULL, NULL);
-       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_WORDING);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_column_set_reorderable(column, TRUE);
-       gtk_tree_view_column_set_alignment (column, 0.5);
-
-       return column;
-}
-
-
-
-
-/* column 6/7: Amount/Expense/Income */
-
-static GtkTreeViewColumn *amount_list_transaction_column(gchar *title, gint id)
+/* = = = = = = = = = = = = = = = = */
+gboolean list_txn_column_id_isvisible(GtkTreeView *treeview, gint sort_id)
 {
-GtkTreeViewColumn  *column;
-GtkCellRenderer    *renderer;
-
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, title);
-       renderer = gtk_cell_renderer_text_new ();
-       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, ope_amount_cell_data_function, GINT_TO_POINTER(id), NULL);
-       gtk_tree_view_column_set_sort_column_id (column, id);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_column_set_reorderable(column, TRUE);
-       gtk_tree_view_column_set_alignment (column, 0.5);
-
-       return column;
-}
-
-
-
+GtkTreeViewColumn *column;
+gint n, id;
 
-/* column 8: Category */
-static GtkTreeViewColumn *category_list_transaction_column()
-{
-GtkTreeViewColumn  *column;
-GtkCellRenderer    *renderer;
+       for(n=0; n < NUM_LST_DSPOPE-1 ; n++ )   // -1 cause account not to be processed
+       {
+               column = gtk_tree_view_get_column (treeview, n);
+               if(column == NULL)
+                       continue;
 
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Category"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_category_cell_data_function, NULL, NULL);
-       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_CATEGORY);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_column_set_reorderable(column, TRUE);
-       gtk_tree_view_column_set_alignment (column, 0.5);
+               if( gtk_tree_view_column_get_visible(column) )
+               {
+                       id = gtk_tree_view_column_get_sort_column_id (column);
+                       if( sort_id == id )
+                               return TRUE;
+               }
+       }
 
-       return column;
+       return FALSE;
 }
 
-/* column 9: Tags */
-static GtkTreeViewColumn *tags_list_transaction_column()
-{
-GtkTreeViewColumn  *column;
-GtkCellRenderer    *renderer;
-
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Tags"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_tags_cell_data_function, NULL, NULL);
-       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_TAGS);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_column_set_reorderable(column, TRUE);
-       gtk_tree_view_column_set_alignment (column, 0.5);
-
-       return column;
-}
 
-static GtkTreeViewColumn *list_transaction_get_column(GList *list, gint search_id)
+static GtkTreeViewColumn *list_txn_get_column(GList *list, gint search_id)
 {
 GtkTreeViewColumn *column = NULL;
 GList *tmp;
@@ -545,16 +529,17 @@ gint id;
        {
                id = gtk_tree_view_column_get_sort_column_id(tmp->data);
                if( search_id == id)
+               {
                        column = tmp->data;
-
+                       break;
+               }
                tmp = g_list_next(tmp);
        }
-
        return column;
 }
 
 
-guint list_transaction_get_quicksearch_column_mask(GtkTreeView *treeview)
+guint list_txn_get_quicksearch_column_mask(GtkTreeView *treeview)
 {
 GtkTreeViewColumn *column;
 guint n, mask;
@@ -585,13 +570,24 @@ gint id;
 }
 
 
-/* todo: something simpler to sort ? */
-void list_transaction_sort_force(GtkTreeSortable *sortable, gpointer user_data)
+void list_txn_set_save_column_width(GtkTreeView *treeview, gboolean save_column_width)
+{
+struct list_txn_data *data;
+
+       data = g_object_get_data(G_OBJECT(treeview), "inst_data");
+       if( data )
+       {
+               data->save_column_width = save_column_width;
+       }
+}
+
+
+void list_txn_sort_force(GtkTreeSortable *sortable, gpointer user_data)
 {
 gint sort_column_id;
 GtkSortType order;
 
-       DB( g_print("list_transaction_sort_force\n") );
+       DB( g_print("list_txn_sort_force\n") );
 
        gtk_tree_sortable_get_sort_column_id(sortable, &sort_column_id, &order);
        DB( g_print(" - id %d order %d\n", sort_column_id, order) );
@@ -601,61 +597,119 @@ GtkSortType order;
 }
 
 
-static void list_transaction_sort_column_changed(GtkTreeSortable *sortable, gpointer user_data)
+static void list_txn_get_columns(GtkTreeView *treeview)
 {
-struct list_transaction_data *data = user_data;
-gint id;
-GtkSortType order;
-gboolean showBalance;
+struct list_txn_data *data;
+GtkTreeViewColumn *column;
+gint i, col_id;
+
+       DB( g_print("\n[list_txn] get columns order/width\n") );
        
-       gtk_tree_sortable_get_sort_column_id(sortable, &id, &order);
+       data = g_object_get_data(G_OBJECT(treeview), "inst_data");
 
-       DB( g_print("list_transaction_columns_changed %d %d\n", id, order) );
+       DB( g_print(" nbcol=%d, nbsortid=%d\n", NUM_LST_DSPOPE, gtk_tree_view_get_n_columns (treeview)) );
+       
+       for(i=0 ; i < NUM_LST_DSPOPE-1 ; i++ )   // -1 'caus: account and blank column
+       {
+               column = gtk_tree_view_get_column(treeview, i);
+               if(column != NULL)
+               {
+                       col_id = gtk_tree_view_column_get_sort_column_id (column);
+                       if( col_id >= 0 )
+                       {
+                       gboolean visible;
 
-       //here save the transaction list columnid and sort order
-       PREFS->lst_ope_sort_id    = id;
-       PREFS->lst_ope_sort_order = order;
+                               visible = gtk_tree_view_column_get_visible (column);
+                               if( col_id == LST_DSPOPE_BALANCE)   //keep initial state of balance
+                                       visible = data->tvc_is_visible;
 
-       //manage visibility of balance column
-       //showBalance = (id == LST_DSPOPE_DATE && order == GTK_SORT_ASCENDING) ? data->tvc_is_visible : FALSE;
-       showBalance = (id == LST_DSPOPE_DATE) ? data->tvc_is_visible : FALSE;
-       gtk_tree_view_column_set_visible (data->tvc_balance, showBalance);
+                               if( visible )
+                                       PREFS->lst_ope_columns[i] = col_id;
+                               else
+                                       PREFS->lst_ope_columns[i] = -col_id;
+                               
+                               PREFS->lst_ope_col_size[col_id-1] = gtk_tree_view_column_get_width(column);
+
+                               DB( g_print(" col-%2d => %2d '%s' w=%d\n", i, col_id, gtk_tree_view_column_get_title(column), PREFS->lst_ope_col_size[col_id-1] ) );
+                       }
+                       else    //should not occurs
+                               PREFS->lst_ope_columns[i] = 0;
+               }
+       }
 }
 
 
-static void list_transaction_set_columns(GtkTreeView *treeview, gint *visibility)
+static void list_txn_set_columns(GtkTreeView *treeview, gint *col_id)
 {
-struct list_transaction_data *data;
+struct list_txn_data *data;
 GtkTreeViewColumn *column, *base;
 gboolean visible;
 GList *list;
 gint i = 0;
+gint id;
 
-       DB( g_print("(list_transaction_set_columns)\n") );
-
-       data = g_object_get_data(G_OBJECT(treeview), "inst_data");
+       DB( g_print("\n[list_txn] set columns order/width\n") );
        
+       data = g_object_get_data(G_OBJECT(treeview), "inst_data");
+
+#if MYDEBUG == 1
+       DB( g_print("\n debug column sortid\n") );
+
+       for(i=0; i < NUM_LST_DSPOPE-1 ; i++ )   // -1 cause account not to be processed
+       {
+               DB( g_print(" - pos:%2d sortid:%2d\n", i, col_id[i]) );
+       }
+#endif 
+
+
+       DB( g_print("\n apply column prefs\n") );
+
        list = gtk_tree_view_get_columns( treeview );
 
        base = NULL;
 
        for(i=0; i < NUM_LST_DSPOPE-1 ; i++ )   // -1 cause account not to be processed
        {
-               column = list_transaction_get_column(list, ABS(visibility[i]));
+               /* hidden are stored as col_id negative */
+               id = ABS(col_id[i]);
+               column = list_txn_get_column(list, id);
+
+               //DB( g_print(" - get column %d %p\n", id, column) );
+               
                if( column != NULL )
                {
-                       DB( g_print(" - pos:%d col:%d (%s)\n", i, visibility[i], gtk_tree_view_column_get_title(column)) );
+                       DB( g_print(" - pos:%2d sortid:%2d (%s)\n", i, col_id[i], gtk_tree_view_column_get_title(column)) );
 
                        gtk_tree_view_move_column_after(treeview, column, base);
                        base = column;
 
-                       visible = visibility[i] < 0 ? FALSE : TRUE;
+                       visible = col_id[i] < 0 ? FALSE : TRUE;
+                       
+                       /* display exception for detail/import list */
+                       if(data->list_type != LIST_TXN_TYPE_BOOK)
+                       {
+                               if( id == LST_DSPOPE_AMOUNT )
+                                       visible = TRUE;
+                               
+                               if( id == LST_DSPOPE_STATUS || id == LST_DSPOPE_EXPENSE || id == LST_DSPOPE_INCOME )
+                                       visible = FALSE;
+                       }
+                       
                        gtk_tree_view_column_set_visible (column, visible);
-                       if( ABS(visibility[i]) == LST_DSPOPE_BALANCE)
+                       if( id == LST_DSPOPE_BALANCE )
                        {
                                data->tvc_is_visible = visible;
                        }
-                       
+
+                       if(   id == LST_DSPOPE_INFO
+                          || id == LST_DSPOPE_PAYEE
+                          || id == LST_DSPOPE_WORDING
+                          || id == LST_DSPOPE_CATEGORY
+                          || id == LST_DSPOPE_TAGS
+                          || id == LST_DSPOPE_ACCOUNT )
+                       {
+                               gtk_tree_view_column_set_fixed_width( column, PREFS->lst_ope_col_size[id - 1]);
+                       }
                }
 
        }
@@ -664,40 +718,262 @@ gint i = 0;
 }
 
 
-static void list_transaction_destroy( GtkWidget *widget, gpointer user_data )
+static void list_txn_sort_column_changed(GtkTreeSortable *sortable, gpointer user_data)
+{
+struct list_txn_data *data = user_data;
+gint id;
+GtkSortType order;
+gboolean showBalance;
+       
+       gtk_tree_sortable_get_sort_column_id(sortable, &id, &order);
+
+       DB( g_print("list_txn_columns_changed %d %d\n", id, order) );
+
+       //here save the transaction list columnid and sort order
+       PREFS->lst_ope_sort_id    = id;
+       PREFS->lst_ope_sort_order = order;
+
+       //manage visibility of balance column
+       //showBalance = (id == LST_DSPOPE_DATE && order == GTK_SORT_ASCENDING) ? data->tvc_is_visible : FALSE;
+       showBalance = (id == LST_DSPOPE_DATE) ? data->tvc_is_visible : FALSE;
+       gtk_tree_view_column_set_visible (data->tvc_balance, showBalance);
+}
+
+
+static void
+list_txn_column_popup_menuitem_on_activate (GtkCheckMenuItem *checkmenuitem,
+               gpointer          user_data)
+{
+GtkTreeViewColumn *column = user_data;
+
+       DB( g_print("toggled\n") );
+
+       gtk_tree_view_column_set_visible(column, gtk_check_menu_item_get_active(checkmenuitem) );
+}
+
+
+static gboolean list_txn_column_popup_callback ( GtkWidget *button,
+                        GdkEventButton *ev,
+                        gpointer user_data )
+{
+struct list_txn_data *data = user_data;
+GtkWidget *menu, *menuitem;
+GtkTreeViewColumn *column;
+gint i, col_id;
+
+       if( ev->button == 3 )
+       {
+               DB( g_print("should popup\n") );
+       
+               menu = gtk_menu_new ();
+               
+               //note: deactive this disable any menuitem action
+               g_signal_connect (menu, "selection-done", G_CALLBACK (gtk_widget_destroy), NULL);
+
+               for(i=0 ; i < NUM_LST_DSPOPE-1 ; i++ )   // -1 'caus: account and blank column
+               {
+                       column = gtk_tree_view_get_column(GTK_TREE_VIEW(data->treeview), i);
+                       if( column != NULL )
+                       {
+                               col_id = gtk_tree_view_column_get_sort_column_id (column);
+
+                               if( (col_id == -1) 
+                                       || (col_id == LST_DSPOPE_STATUS) 
+                                       || (col_id == LST_DSPOPE_ACCOUNT) 
+                                       || (col_id == LST_DSPOPE_DATE)
+                                       || (col_id == LST_DSPOPE_BALANCE)
+                               )
+                                       continue;
+                               //if( (data->tvc_is_visible == FALSE) && (col_id == LST_DSPOPE_BALANCE) )
+                               //      continue;
+                               
+                               if( (data->list_type == LIST_TXN_TYPE_DETAIL) && 
+                                       (   (col_id == LST_DSPOPE_AMOUNT) 
+                                       || (col_id == LST_DSPOPE_EXPENSE) 
+                                       || (col_id == LST_DSPOPE_INCOME)
+                                       ) 
+                               )
+                                       continue;
+
+                               menuitem = gtk_check_menu_item_new_with_label ( gtk_tree_view_column_get_title (column) );
+                               gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+                               gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), gtk_tree_view_column_get_visible (column) );
+                               gtk_widget_show (menuitem);
+                               
+                               g_signal_connect (menuitem, "activate",
+                                                               G_CALLBACK (list_txn_column_popup_menuitem_on_activate), column);
+                       }
+               
+               }
+       
+               gtk_menu_attach_to_widget (GTK_MENU (menu), button, NULL);
+               gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+                                     ev->button, ev->time);
+       }
+
+    return FALSE;
+}
+
+
+
+static GtkTreeViewColumn *
+list_txn_column_amount_create(gint list_type, gchar *title, gint sortcolumnid, GtkTreeCellDataFunc func)
+{
+GtkTreeViewColumn  *column;
+GtkCellRenderer    *renderer;
+
+       renderer = gtk_cell_renderer_text_new ();
+       g_object_set(renderer, "xalign", 1.0, NULL);
+
+       column = gtk_tree_view_column_new_with_attributes(title, renderer, NULL);
+       
+       gtk_tree_view_column_set_alignment (column, 0.5);
+       //gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_column_set_sort_column_id (column, sortcolumnid);
+       if(list_type == LIST_TXN_TYPE_BOOK)
+       {
+               gtk_tree_view_column_set_reorderable(column, TRUE);
+       }
+       gtk_tree_view_column_set_cell_data_func(column, renderer, func, GINT_TO_POINTER(sortcolumnid), NULL);
+               
+       return column;
+}
+
+
+static GtkTreeViewColumn *
+list_txn_column_text_create(gint list_type, gchar *title, gint sortcolumnid, GtkTreeCellDataFunc func, gpointer user_data)
+{
+GtkTreeViewColumn  *column;
+GtkCellRenderer    *renderer;
+
+       renderer = gtk_cell_renderer_text_new ();
+       /*g_object_set(renderer, 
+               "ellipsize", PANGO_ELLIPSIZE_END,
+           "ellipsize-set", TRUE,
+           NULL);*/
+       
+       column = gtk_tree_view_column_new_with_attributes(title, renderer, NULL);
+
+       gtk_tree_view_column_set_alignment (column, 0.5);
+       gtk_tree_view_column_set_resizable(column, TRUE);
+
+       gtk_tree_view_column_set_sort_column_id (column, sortcolumnid);
+       if(list_type == LIST_TXN_TYPE_BOOK)
+       {
+               gtk_tree_view_column_set_reorderable(column, TRUE);
+               gtk_tree_view_column_set_min_width (column, HB_MINWIDTH_COLUMN);
+               gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+       }
+       gtk_tree_view_column_set_cell_data_func(column, renderer, func, user_data, NULL);
+
+       return column;
+}
+
+
+static GtkTreeViewColumn *
+list_txn_column_info_create(gint list_type)
 {
-struct list_transaction_data *data;
+GtkTreeViewColumn  *column;
+GtkCellRenderer    *renderer;
+
+       column = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_title(column, _("Info"));
+
+       renderer = gtk_cell_renderer_pixbuf_new ();
+       gtk_tree_view_column_pack_start(column, renderer, FALSE);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_info_cell_data_function, GINT_TO_POINTER(1), NULL);
+
+       renderer = gtk_cell_renderer_text_new ();
+       /*g_object_set(renderer, 
+               "ellipsize", PANGO_ELLIPSIZE_END,
+           "ellipsize-set", TRUE,
+           NULL);*/
+       gtk_tree_view_column_pack_start(column, renderer, TRUE);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_info_cell_data_function, GINT_TO_POINTER(2), NULL);
+
+       gtk_tree_view_column_set_alignment (column, 0.5);
+       gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_INFO);
+       if(list_type == LIST_TXN_TYPE_BOOK)
+       {
+               gtk_tree_view_column_set_reorderable(column, TRUE);
+               gtk_tree_view_column_set_min_width (column, HB_MINWIDTH_COLUMN);
+               gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+       }
+
+       return column;
+}
+
+
+static void list_txn_destroy( GtkWidget *widget, gpointer user_data )
+{
+struct list_txn_data *data;
 
        data = g_object_get_data(G_OBJECT(widget), "inst_data");
 
        DB( g_print ("\n[list_transaction] destroy event occurred\n") );
 
-       
+       if( data->save_column_width )
+       {
+               list_txn_get_columns(GTK_TREE_VIEW(data->treeview));
+       }
+               
        DB( g_print(" - view=%p, inst_data=%p\n", widget, data) );
        g_free(data);
 }
 
 
+Transaction *list_txn_get_active_transaction(GtkTreeView *treeview)
+{
+GtkTreeModel *model;
+GList *list;
+Transaction *ope;
+
+       ope = NULL;
+
+       model = gtk_tree_view_get_model(treeview);
+       list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(treeview), &model);
+
+       if(list != NULL)
+       {
+       GtkTreeIter iter;
+
+               gtk_tree_model_get_iter(model, &iter, list->data);
+               gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, &ope, -1);
+       }
+
+       g_list_foreach(list, (GFunc)gtk_tree_path_free, NULL);
+       g_list_free(list);
+
+       return ope;
+}
+
+
 /*
 ** create our transaction list
 ** Status, Date, Info, Payee, Wording, (Amount), Expense, Income, Category
 */
-GtkWidget *create_list_transaction(gint type, gboolean *pref_columns)
+GtkWidget *create_list_transaction(gint list_type, gboolean *pref_columns)
 {
-struct list_transaction_data *data;
+struct list_txn_data *data;
 GtkListStore *store;
-GtkWidget *view;
+GtkWidget *treeview;
 GtkCellRenderer    *renderer;
-GtkTreeViewColumn  *column, *col_acc = NULL;
+GtkTreeViewColumn  *column, *col_acc = NULL, *col_status = NULL;
 
 
-       data = g_malloc0(sizeof(struct list_transaction_data));
+       data = g_malloc0(sizeof(struct list_txn_data));
        if(!data) return NULL;
 
+       data->list_type = list_type;
+       data->save_column_width = FALSE;
+       
        /* create list store */
        store = gtk_list_store_new(
                NUM_LST_DSPOPE,
                G_TYPE_POINTER, /*only really used columns, other are fake */
+           G_TYPE_BOOLEAN,
                G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
                G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
                G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
@@ -708,131 +984,199 @@ GtkTreeViewColumn  *column, *col_acc = NULL;
                );
 
        //treeview
-       view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+       treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+       data->treeview = treeview;
        g_object_unref(store);
 
        //store our window private data
-       g_object_set_data(G_OBJECT(view), "inst_data", (gpointer)data);
-       DB( g_print(" - view=%p, inst_data=%p\n", view, data) );
+       g_object_set_data(G_OBJECT(treeview), "inst_data", (gpointer)data);
+       DB( g_print(" - treeview=%p, inst_data=%p\n", treeview, data) );
 
        // connect our dispose function
-       g_signal_connect (view, "destroy",
-               G_CALLBACK (list_transaction_destroy), (gpointer)data);
-
-       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), PREFS->rules_hint);
+       g_signal_connect (treeview, "destroy", G_CALLBACK (list_txn_destroy), (gpointer)data);
+       
+       gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (treeview), PREFS->grid_lines);
        //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
        //                             COLUMN_DESCRIPTION);
 
-       if(type == TRN_LIST_TYPE_BOOK)
-               gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_MULTIPLE);
+       if(list_type == LIST_TXN_TYPE_BOOK)
+               gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), GTK_SELECTION_MULTIPLE);
 
-       /* column 1: Status */
+       /* column 1: Changes */
        column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Status"));
+       //gtk_tree_view_column_set_title(column, _("Status"));
+       col_status = column;
 
        renderer = gtk_cell_renderer_pixbuf_new ();
-       gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
+       //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, ope_status_cell_data_function, GINT_TO_POINTER(1), NULL);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_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_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, ope_status_cell_data_function, GINT_TO_POINTER(2), NULL);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_status_cell_data_function, GINT_TO_POINTER(2), NULL);
 
        renderer = gtk_cell_renderer_pixbuf_new ();
-       gtk_cell_renderer_set_fixed_size(renderer, GLOBALS->lst_pixbuf_maxwidth, -1);
+       //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, ope_status_cell_data_function, GINT_TO_POINTER(3), NULL);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_status_cell_data_function, GINT_TO_POINTER(3), NULL);
 
        gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_STATUS);
        //gtk_tree_view_column_set_resizable(column, TRUE);
        gtk_tree_view_column_set_alignment (column, 0.5);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-
-       if(type == TRN_LIST_TYPE_DETAIL)
+       if(list_type == LIST_TXN_TYPE_DETAIL)
        {
-               column = gtk_tree_view_column_new();
+               column = list_txn_column_text_create(list_type, _("Account"), LST_DSPOPE_ACCOUNT, list_txn_account_cell_data_function, NULL);
+               gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
                col_acc = column;
-               gtk_tree_view_column_set_title(column, _("Account"));
-               renderer = gtk_cell_renderer_text_new ();
-               gtk_tree_view_column_pack_start(column, renderer, TRUE);
-               gtk_tree_view_column_set_cell_data_func(column, renderer, ope_account_cell_data_function, NULL, NULL);
-               gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_ACCOUNT);
-               gtk_tree_view_column_set_resizable(column, TRUE);
-               gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+               // add column popup
+               g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+                       "button-press-event",
+                       G_CALLBACK ( list_txn_column_popup_callback ),
+                       data );
        }
 
-
        /* column 2: Date */
        column = gtk_tree_view_column_new();
        gtk_tree_view_column_set_title(column, _("Date"));
        renderer = gtk_cell_renderer_text_new ();
        gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_date_cell_data_function, NULL, NULL);
+       g_object_set(renderer, "xalign", 1.0, NULL);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_date_cell_data_function, NULL, NULL);
        gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-
-       column = info_list_transaction_column();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = payee_list_transaction_column();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = wording_list_transaction_column();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = amount_list_transaction_column(_("Amount"), LST_DSPOPE_AMOUNT);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = amount_list_transaction_column(_("Expense"), LST_DSPOPE_EXPENSE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = amount_list_transaction_column(_("Income"), LST_DSPOPE_INCOME);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = category_list_transaction_column();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       column = tags_list_transaction_column();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       if(type != TRN_LIST_TYPE_DETAIL)
+       //gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+
+       column = list_txn_column_info_create(list_type);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+       
+       column = list_txn_column_text_create(list_type, _("Payee"), LST_DSPOPE_PAYEE, list_txn_payee_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       column = list_txn_column_text_create(list_type, _("Memo"), LST_DSPOPE_WORDING, list_txn_wording_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       /* column status CLR */
+       column = gtk_tree_view_column_new();
+       gtk_tree_view_column_set_title(column, _("Status"));
+       //renderer = gtk_cell_renderer_text_new ();
+       renderer = gtk_cell_renderer_pixbuf_new();
+       gtk_tree_view_column_pack_start(column, renderer, TRUE);
+       g_object_set(renderer, "xalign", 1.0, NULL);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_clr_cell_data_function, NULL, NULL);
+       gtk_tree_view_column_set_reorderable(column, TRUE);
+       gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_CLR);
+       //gtk_tree_view_column_set_sort_indicator (column, FALSE);
+       //gtk_tree_view_column_set_resizable(column, TRUE);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+       
+       
+       column = list_txn_column_amount_create(list_type, _("Amount"), LST_DSPOPE_AMOUNT, list_txn_amount_cell_data_function);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       column = list_txn_column_amount_create(list_type, _("Expense"), LST_DSPOPE_EXPENSE, list_txn_amount_cell_data_function);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       column = list_txn_column_amount_create(list_type, _("Income"), LST_DSPOPE_INCOME, list_txn_amount_cell_data_function);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       column = list_txn_column_text_create(list_type, _("Category"), LST_DSPOPE_CATEGORY, list_txn_category_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       column = list_txn_column_text_create(list_type, _("Tags"), LST_DSPOPE_TAGS, list_txn_tags_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       // add column popup
+    g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+               "button-press-event",
+               G_CALLBACK ( list_txn_column_popup_callback ),
+               data );
+
+       if(list_type == LIST_TXN_TYPE_BOOK)
        {
-               column = amount_list_transaction_column(_("Balance"), LST_DSPOPE_BALANCE);
+               column = list_txn_column_amount_create(list_type, _("Balance"), LST_DSPOPE_BALANCE, list_txn_amount_cell_data_function);
                data->tvc_balance = column;
                gtk_tree_view_column_set_clickable(column, FALSE);
-               gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+               gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+               // add column popup
+               g_signal_connect ( G_OBJECT (gtk_tree_view_column_get_button (column)), 
+                       "button-press-event",
+                       G_CALLBACK ( list_txn_column_popup_callback ),
+                       data );
        }
        
   /* column 9: empty */
        column = gtk_tree_view_column_new();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
   /* sort */
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_STATUS  , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_STATUS), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_DATE    , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_DATE), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_INFO    , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_INFO), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_PAYEE   , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_PAYEE), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_WORDING , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_WORDING), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_AMOUNT  , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_AMOUNT), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_EXPENSE , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_EXPENSE), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_INCOME  , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_INCOME), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_CATEGORY, ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_CATEGORY), NULL);
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_TAGS    , ope_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_TAGS), NULL);
-
-
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_STATUS  , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_STATUS), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_DATE    , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_DATE), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_INFO    , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_INFO), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_PAYEE   , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_PAYEE), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_WORDING , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_WORDING), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_AMOUNT  , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_AMOUNT), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_EXPENSE , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_EXPENSE), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_INCOME  , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_INCOME), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_CATEGORY, list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_CATEGORY), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_TAGS    , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_TAGS), NULL);
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), LST_DSPOPE_CLR     , list_txn_sort_iter_compare_func, GINT_TO_POINTER(LST_DSPOPE_CLR), NULL);
 
   /* apply user preference for columns */
-       list_transaction_set_columns(GTK_TREE_VIEW(view), pref_columns);
+       list_txn_set_columns(GTK_TREE_VIEW(treeview), pref_columns);
 
-  /* force accoutn column for detail view */
-       if(type == TRN_LIST_TYPE_DETAIL)
+  /* force account column for detail treeview */
+       if(list_type == LIST_TXN_TYPE_DETAIL)
        {
-               gtk_tree_view_move_column_after(GTK_TREE_VIEW(view), col_acc, NULL);
+               gtk_tree_view_move_column_after(GTK_TREE_VIEW(treeview), col_acc, col_status);
        }
 
   /* set initial sort order */
@@ -841,13 +1185,15 @@ GtkTreeViewColumn  *column, *col_acc = NULL;
 
 
        /* signals */
-       if(type == TRN_LIST_TYPE_BOOK)
-               g_signal_connect (GTK_TREE_SORTABLE(store), "sort-column-changed", G_CALLBACK (list_transaction_sort_column_changed), data);
+       if(list_type == LIST_TXN_TYPE_BOOK)
+               g_signal_connect (GTK_TREE_SORTABLE(store), "sort-column-changed", G_CALLBACK (list_txn_sort_column_changed), data);
 
-       return(view);
+       return(treeview);
 }
 
 
+/* ---------------------------------------------- */
+/*  import list : soon obsolete */
 /* ---------------------------------------------- */
 
 /*
@@ -881,38 +1227,36 @@ Account *acc, *dacc;
 static void ope_importamount_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
-gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
+gchar formatd_buf[G_ASCII_DTOSTR_BUF_SIZE];
 gchar *color;
 
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
 
-       mystrfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, ope->amount, GLOBALS->minor);
+       //mystrfnum(buf, G_ASCII_DTOSTR_BUF_SIZE-1, ope->amount, GLOBALS->minor);
        //hb_strfmon(buf, G_ASCII_DTOSTR_BUF_SIZE-1, ope->amount, GLOBALS->minor);
+       g_ascii_formatd(formatd_buf, G_ASCII_DTOSTR_BUF_SIZE-1, "%.2f", ope->amount);
 
        color = get_normal_color_amount(ope->amount);
 
        g_object_set(renderer,
                        "foreground",  color,
-                       "text", buf,
+                       "text", formatd_buf,
                        NULL);
 
 }
 
-/*
-**
-*/
+
 static void ope_importstatus_cell_data_function (GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
 {
 Transaction *ope;
-GdkPixbuf *pixbuf = NULL;
+gchar *iconname = NULL;
 
        // get the transaction
        gtk_tree_model_get(model, iter, LST_DSPOPE_DATAS, &ope, -1);
 
-       if( ope->same != NULL )
-               pixbuf = GLOBALS->lst_pixbuf[LST_PIXBUF_WARNING];
+       iconname = ( ope->same != NULL ) ? ICONNAME_WARNING : NULL;
 
-       g_object_set(renderer, "pixbuf", pixbuf, NULL);
+       g_object_set(renderer, "icon-name", iconname, NULL);
 }
 
 
@@ -943,10 +1287,10 @@ ope_importfixed_toggled (GtkCellRendererToggle *cell,
 /*
 ** create our transaction list
 */
-GtkWidget *create_list_import_transaction(void)
+GtkWidget *create_list_import_transaction(gboolean enable_choose)
 {
 GtkListStore *store;
-GtkWidget *view;
+GtkWidget *treeview;
 GtkCellRenderer    *renderer;
 GtkTreeViewColumn  *column;
 
@@ -966,38 +1310,40 @@ GtkTreeViewColumn  *column;
                );
 
        //treeview
-       view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+       treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
        g_object_unref(store);
 
-       gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE);
+       gtk_tree_view_set_grid_lines (GTK_TREE_VIEW (treeview), PREFS->grid_lines);
        //gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview),
        //                             COLUMN_DESCRIPTION);
 
        //gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_MULTIPLE);
 
        /* column: Selection */
-       renderer = gtk_cell_renderer_toggle_new ();
+       if(enable_choose)
+       {
+               renderer = gtk_cell_renderer_toggle_new ();
 
-       g_signal_connect (renderer, "toggled",
-                   G_CALLBACK (ope_importfixed_toggled), store);
+               g_signal_connect (renderer, "toggled", G_CALLBACK (ope_importfixed_toggled), store);
 
 
-       column = gtk_tree_view_column_new_with_attributes (NULL,
-                                                    renderer,
-                                                    "active", LST_OPE_IMPTOGGLE,
-                                                    NULL);
+               column = gtk_tree_view_column_new_with_attributes (NULL,
+                                                                renderer,
+                                                                "active", LST_OPE_IMPTOGGLE,
+                                                                NULL);
 
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       /* column: Duplicate */
-       column = gtk_tree_view_column_new();
-       //gtk_tree_view_column_set_title(column, _("Import ?"));
-       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, ope_importstatus_cell_data_function, NULL, NULL);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+               gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
+               /* column: Duplicate */
+               column = gtk_tree_view_column_new();
+               //gtk_tree_view_column_set_title(column, _("Import ?"));
+               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, ope_importstatus_cell_data_function, NULL, NULL);
+               gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
+       }
+               
 //#ifndef NOOFX
        /* column: Account */
        column = gtk_tree_view_column_new();
@@ -1007,84 +1353,37 @@ GtkTreeViewColumn  *column;
        gtk_tree_view_column_set_cell_data_func(column, renderer, ope_importaccount_cell_data_function, NULL, NULL);
        //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
        gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 //#endif
 
        /* column: Date */
        column = gtk_tree_view_column_new();
        gtk_tree_view_column_set_title(column, _("Date"));
        renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_date_cell_data_function, NULL, NULL);
-       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-
-       /* column: Wording */
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Memo"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_wording_cell_data_function, NULL, NULL);
-       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_WORDING);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       /* column: Amount */
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Amount"));
-       renderer = gtk_cell_renderer_text_new ();
        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, ope_importamount_cell_data_function, NULL, NULL);
-       gtk_tree_view_column_set_alignment (column, 1.0);
-       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_EXPENSE);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
-
-       /* column: Infos */
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Info"));
-
-       renderer = gtk_cell_renderer_pixbuf_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_info_cell_data_function, GINT_TO_POINTER(1), NULL);
-
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_info_cell_data_function, GINT_TO_POINTER(2), NULL);
-       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_INFO);
+       gtk_tree_view_column_set_cell_data_func(column, renderer, list_txn_date_cell_data_function, NULL, NULL);
+       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_DATE);
        gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-       /* column: Payee */
-
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Payee"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_payee_cell_data_function, NULL, NULL);
-       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_PAYEE);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       column = list_txn_column_text_create(LIST_TXN_TYPE_IMPORT, _("Memo"), -1, list_txn_wording_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-       /* column : Category */
+       column = list_txn_column_amount_create(LIST_TXN_TYPE_IMPORT, _("Amount"), -1, ope_importamount_cell_data_function);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-       column = gtk_tree_view_column_new();
-       gtk_tree_view_column_set_title(column, _("Category"));
-       renderer = gtk_cell_renderer_text_new ();
-       gtk_tree_view_column_pack_start(column, renderer, TRUE);
-       gtk_tree_view_column_set_cell_data_func(column, renderer, ope_category_cell_data_function, NULL, NULL);
-       //gtk_tree_view_column_set_sort_column_id (column, LST_DSPOPE_CATEGORY);
-       gtk_tree_view_column_set_resizable(column, TRUE);
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       column = list_txn_column_info_create(LIST_TXN_TYPE_IMPORT);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
+       column = list_txn_column_text_create(LIST_TXN_TYPE_IMPORT, _("Payee"), -1, list_txn_payee_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
+       column = list_txn_column_text_create(LIST_TXN_TYPE_IMPORT, _("Category"), -1, list_txn_category_cell_data_function, NULL);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-       /* column 6: empty */
        column = gtk_tree_view_column_new();
-       gtk_tree_view_append_column (GTK_TREE_VIEW(view), column);
+       gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column);
 
-       return(view);
+       return(treeview);
 }
This page took 0.055795 seconds and 4 git commands to generate.