]> Dogcows Code - chaz/homebank/blobdiff - src/dsp-account.c
import homebank-5.2.4
[chaz/homebank] / src / dsp-account.c
similarity index 75%
rename from src/dsp_account.c
rename to src/dsp-account.c
index fd7e98933b02e28a658d092181639a94ffb08109..336a5261c2147d2bcc46107362da6067b7c85b5a 100644 (file)
@@ -1,5 +1,5 @@
 /*     HomeBank -- Free, easy, personal accounting for everyone.
 /*     HomeBank -- Free, easy, personal accounting for everyone.
- *     Copyright (C) 1995-2018 Maxime DOYEN
+ *     Copyright (C) 1995-2019 Maxime DOYEN
  *
  *     This file is part of HomeBank.
  *
  *
  *     This file is part of HomeBank.
  *
 
 #include "homebank.h"
 
 
 #include "homebank.h"
 
-#include "dsp_account.h"
-#include "dsp_mainwindow.h"
+#include "dsp-account.h"
+#include "dsp-mainwindow.h"
+
+#include "list-operation.h"
+#include "hub-account.h"
 
 
-#include "list_operation.h"
 #include "ui-widgets.h"
 #include "ui-filter.h"
 #include "ui-transaction.h"
 #include "ui-widgets.h"
 #include "ui-filter.h"
 #include "ui-transaction.h"
@@ -47,13 +49,12 @@ extern struct Preferences *PREFS;
 //debug
 #define UI 1
 
 //debug
 #define UI 1
 
-//extern gchar *CYA_FLT_SELECT[];
 
 extern gchar *CYA_FLT_TYPE[];
 extern gchar *CYA_FLT_STATUS[];
 
 
 
 extern gchar *CYA_FLT_TYPE[];
 extern gchar *CYA_FLT_STATUS[];
 
 
-static void register_panel_collect_filtered_txn(GtkWidget *view);
+static void register_panel_collect_filtered_txn(GtkWidget *view, gboolean emptysearch);
 static void register_panel_listview_populate(GtkWidget *view);
 static void register_panel_action(GtkWidget *widget, gpointer user_data);
 static void register_panel_update(GtkWidget *widget, gpointer user_data);
 static void register_panel_listview_populate(GtkWidget *view);
 static void register_panel_action(GtkWidget *widget, gpointer user_data);
 static void register_panel_update(GtkWidget *widget, gpointer user_data);
@@ -162,8 +163,8 @@ static void register_panel_action_exportpdf(GtkAction *action, gpointer user_dat
 struct register_panel_data *data = user_data;
 gchar *name, *filepath;
 
 struct register_panel_data *data = user_data;
 gchar *name, *filepath;
 
-
-
+       if(data->showall == FALSE)
+       {
                name = g_strdup_printf("%s.pdf", data->acc->name);
                filepath = g_build_filename(PREFS->path_export, name, NULL);
                g_free(name);
                name = g_strdup_printf("%s.pdf", data->acc->name);
                filepath = g_build_filename(PREFS->path_export, name, NULL);
                g_free(name);
@@ -178,7 +179,61 @@ gchar *name, *filepath;
 
                g_free(filepath);
                
 
                g_free(filepath);
                
+       }
+}
+
+
+static void register_panel_action_duplicate_mark(GtkAction *action, gpointer user_data)
+{
+struct register_panel_data *data = user_data;
+       
+       DB( g_print("check duplicate\n\n") );
+
+       // open dialog to select date tolerance in days
+       //  with info message
+       //  with check/fix button and progress bar
+       // parse listview txn, clear/mark duplicate
+       // apply filter
+
+       if(data->showall == FALSE)
+       {
+       gint daygap;
+
+               daygap = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_txn_daygap));
+               data->similar = transaction_similar_mark (data->acc, daygap);
+               if( data->similar > 0 )
+               {
+               gchar *text = g_strdup_printf(_("There is %d group of similar transactions"), data->similar);
+                       gtk_label_set_text(GTK_LABEL(data->LB_duplicate), text);
+                       g_free(text);
+               }
+               else
+                       gtk_label_set_text(GTK_LABEL(data->LB_duplicate), _("No similar transaction were found !"));
+
+               gtk_widget_show(data->IB_duplicate);
+               //#GTK+710888: hack waiting a fix
+               gtk_widget_queue_resize (data->IB_duplicate);
 
 
+               gtk_widget_queue_draw (data->LV_ope);
+       }
+
+
+}
+
+
+static void register_panel_action_duplicate_unmark(GtkAction *action, gpointer user_data)
+{
+struct register_panel_data *data = user_data;
+
+       DB( g_print("uncheck duplicate\n\n") );
+
+       if(data->showall == FALSE)
+       {   
+               data->similar = 0;
+               gtk_widget_hide(data->IB_duplicate);
+               transaction_similar_unmark(data->acc);
+               gtk_widget_queue_draw (data->LV_ope);
+       }
 }
 
 
 }
 
 
@@ -259,15 +314,8 @@ gint count;
                        {
                        Transaction *stxn = tmplist->data;
 
                        {
                        Transaction *stxn = tmplist->data;
 
-                       // (open dialog to select date tolerance in days)
-               // ( with info message)
-               // ( with check/fix button and progress bar)
-
-                       //adapt this window
-                               //-display the src txn
-                               //-enable to display 1 of xxx if more than 1
-
-                               transaction_xfer_search_or_add_child(GTK_WINDOW(data->window), stxn, TRUE);
+                               //future (open dialog to select date tolerance in days)
+                               transaction_xfer_search_or_add_child(GTK_WINDOW(data->window), stxn, 0);
 
                                tmplist = g_list_next(tmplist);
                        }       
 
                                tmplist = g_list_next(tmplist);
                        }       
@@ -284,6 +332,10 @@ static void register_panel_action_exportqif(GtkAction *action, gpointer user_dat
 struct register_panel_data *data = user_data;
 gchar *filename;
 
 struct register_panel_data *data = user_data;
 gchar *filename;
 
+       // noaction if show all account
+       if(data->showall)
+               return;
+
        DB( g_print("(qif) test qif export\n\n") );
 
        if( ui_file_chooser_qif(GTK_WINDOW(data->window), &filename) == TRUE )
        DB( g_print("(qif) test qif export\n\n") );
 
        if( ui_file_chooser_qif(GTK_WINDOW(data->window), &filename) == TRUE )
@@ -300,6 +352,10 @@ struct register_panel_data *data = user_data;
 gchar *msg;
 gint result;
 
 gchar *msg;
 gint result;
 
+       // noaction if show all account
+       if(data->showall)
+               return;
+
        DB( g_print("action convert to euro\n") );
 
        msg = g_strdup_printf(_("Every transaction amount will be divided by %.6f."), PREFS->euro_value);
        DB( g_print("action convert to euro\n") );
 
        msg = g_strdup_printf(_("Every transaction amount will be divided by %.6f."), PREFS->euro_value);
@@ -327,9 +383,13 @@ struct register_panel_data *data = user_data;
 gint count;
 gboolean usermode = TRUE;
 
 gint count;
 gboolean usermode = TRUE;
 
+       // noaction if show all account
+       if(data->showall)
+               return;
+
        DB( g_print("action assign\n") );
 
        DB( g_print("action assign\n") );
 
-       count = transaction_auto_assign(g_queue_peek_head_link(data->acc->txn_queue), data->accnum);
+       count = transaction_auto_assign(g_queue_peek_head_link(data->acc->txn_queue), data->acc->key);
        gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_ope));
        GLOBALS->changes_count += count;
 
        gtk_tree_view_columns_autosize (GTK_TREE_VIEW(data->LV_ope));
        GLOBALS->changes_count += count;
 
@@ -425,11 +485,20 @@ GtkWidget *dialog;
 
        if( result == GTK_RESPONSE_ACCEPT )
        {
 
        if( result == GTK_RESPONSE_ACCEPT )
        {
+       gboolean do_sort;
        gint changes;
        gint changes;
-               
-               changes = ui_multipleedit_dialog_apply (dialog, NULL);
+
+               //#1792808: sort if date changed 
+               changes = ui_multipleedit_dialog_apply (dialog, &do_sort);
+               data->do_sort = do_sort;
                if( changes > 0 )
                if( changes > 0 )
+               {
+                       //#1782749 update account status
+                       if( data->acc != NULL )
+                               data->acc->flags |= AF_CHANGED;
+
                        ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE));
                        ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_TITLE+UF_SENSITIVE));
+               }
        }
 
        gtk_widget_destroy (dialog);
        }
 
        gtk_widget_destroy (dialog);
@@ -444,27 +513,25 @@ GtkWidget *dialog;
 static void register_panel_make_archive(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
 static void register_panel_make_archive(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
+GtkTreeModel *model;
+GList *selection, *list;
+gint result, count;
 
        DB( g_print("\n[account] make archive\n") );
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
 
        DB( g_print("\n[account] make archive\n") );
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-GtkWidget *p_dialog = NULL;
-GtkTreeModel *model;
-GList *selection, *list;
-gint result, count;
 
        count = gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)));
 
        if( count > 0 )
        {
 
        count = gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)));
 
        if( count > 0 )
        {
-                       p_dialog = gtk_message_dialog_new
-                       (
+
+               result = ui_dialog_msg_confirm_alert(
                                GTK_WINDOW(data->window),
                                GTK_WINDOW(data->window),
-                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                               GTK_MESSAGE_WARNING,
-                       GTK_BUTTONS_YES_NO,
-                       _("Do you want to create a template with\neach of the selected transaction ?")
+                               NULL,
+                               _("Do you want to create a template with\neach of the selected transaction ?"),
+                               _("_Create")
                        );
 
        /*
                        );
 
        /*
@@ -474,13 +541,8 @@ gint result, count;
                        );
        */
 
                        );
        */
 
-               result = gtk_dialog_run( GTK_DIALOG( p_dialog ) );
-               gtk_widget_destroy( p_dialog );
-
-
-               if(result == GTK_RESPONSE_YES)
+               if(result == GTK_RESPONSE_OK)
                {
                {
-
                        model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope));
                        selection = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)), &model);
 
                        model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope));
                        selection = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)), &model);
 
@@ -500,7 +562,8 @@ gint result, count;
 
                                da_archive_init_from_transaction(item, ope);
 
 
                                da_archive_init_from_transaction(item, ope);
 
-                               GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item);
+                               //GLOBALS->arc_list = g_list_append(GLOBALS->arc_list, item);
+                               da_archive_append_new(item);
                                GLOBALS->changes_count++;
 
                                list = g_list_next(list);
                                GLOBALS->changes_count++;
 
                                list = g_list_next(list);
@@ -513,40 +576,64 @@ gint result, count;
 }
 
 
 }
 
 
+static void register_panel_cb_bar_duplicate_response(GtkWidget *info_bar, gint response_id, gpointer user_data)
+{
+struct register_panel_data *data;
+
+       DB( g_print("\n[account] bar_duplicate_response\n") );
+
+       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(info_bar, GTK_TYPE_WINDOW)), "inst_data");
+
+       switch( response_id )
+       {
+               case HB_RESPONSE_REFRESH:
+                       register_panel_action_duplicate_mark(NULL, data);
+                       break;
+               case GTK_RESPONSE_CLOSE:
+                       register_panel_action_duplicate_unmark(NULL, data);
+                       gtk_widget_hide (GTK_WIDGET (info_bar));        
+                       break;
+       }
+}
+
+
 static void register_panel_cb_filter_daterange(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
 static void register_panel_cb_filter_daterange(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
+gboolean future;
 gint range;
 
        DB( g_print("\n[account] filter_daterange\n") );
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
 gint range;
 
        DB( g_print("\n[account] filter_daterange\n") );
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-       range = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_range));
+       range  = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_range));
+       future = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_future));
+
+       data->filter->nbdaysfuture = 0;
 
        if(range != FLT_RANGE_OTHER)
        {
 
        if(range != FLT_RANGE_OTHER)
        {
-               filter_preset_daterange_set(data->filter, range, data->accnum);
+               filter_preset_daterange_set(data->filter, range, (data->showall == FALSE) ? data->acc->key : 0);
                // add eventual x days into future display
                // add eventual x days into future display
-               if( PREFS->date_future_nbdays > 0 )
+               if( future && (PREFS->date_future_nbdays > 0) )
                        filter_preset_daterange_add_futuregap(data->filter, PREFS->date_future_nbdays);
                
                        filter_preset_daterange_add_futuregap(data->filter, PREFS->date_future_nbdays);
                
-               register_panel_collect_filtered_txn(data->LV_ope);
+               register_panel_collect_filtered_txn(data->LV_ope, FALSE);
                register_panel_listview_populate(data->LV_ope);
        }
        else
        {
                register_panel_listview_populate(data->LV_ope);
        }
        else
        {
-               if(ui_flt_manage_dialog_new(data->window, data->filter, FALSE) != GTK_RESPONSE_REJECT)
+               if(ui_flt_manage_dialog_new(GTK_WINDOW(data->window), data->filter, data->showall, TRUE) != GTK_RESPONSE_REJECT)
                {
                {
-                       register_panel_collect_filtered_txn(data->LV_ope);
+                       register_panel_collect_filtered_txn(data->LV_ope, FALSE);
                        register_panel_listview_populate(data->LV_ope);
                        register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_SENSITIVE+UF_BALANCE));
                }
        }
                        register_panel_listview_populate(data->LV_ope);
                        register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_SENSITIVE+UF_BALANCE));
                }
        }
-       
-       
 }
 
 }
 
+
 static void register_panel_cb_filter_type(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
 static void register_panel_cb_filter_type(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
@@ -559,7 +646,7 @@ gint type;
 
        filter_preset_type_set(data->filter, type);
 
 
        filter_preset_type_set(data->filter, type);
 
-       register_panel_collect_filtered_txn(data->LV_ope);
+       register_panel_collect_filtered_txn(data->LV_ope, FALSE);
        register_panel_listview_populate(data->LV_ope);
 }
 
        register_panel_listview_populate(data->LV_ope);
 }
 
@@ -576,7 +663,7 @@ gint status;
 
        filter_preset_status_set(data->filter, status);
 
 
        filter_preset_status_set(data->filter, status);
 
-       register_panel_collect_filtered_txn(data->LV_ope);
+       register_panel_collect_filtered_txn(data->LV_ope, FALSE);
        register_panel_listview_populate(data->LV_ope);
 }
 
        register_panel_listview_populate(data->LV_ope);
 }
 
@@ -588,8 +675,10 @@ struct register_panel_data *data;
        DB( g_print("\n[account] filter_reset\n") );
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
        DB( g_print("\n[account] filter_reset\n") );
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
-       filter_default_all_set(data->filter);
-       filter_preset_daterange_set (data->filter, PREFS->date_range_txn, data->accnum);
+       filter_reset(data->filter);
+
+       filter_preset_daterange_set (data->filter, PREFS->date_range_txn, (data->showall == FALSE) ? data->acc->key : 0);
+
        if(PREFS->hidereconciled)
                filter_preset_status_set (data->filter, 1);
 
        if(PREFS->hidereconciled)
                filter_preset_status_set (data->filter, 1);
 
@@ -597,7 +686,7 @@ struct register_panel_data *data;
        if( PREFS->date_future_nbdays > 0 )
                filter_preset_daterange_add_futuregap(data->filter, PREFS->date_future_nbdays);
 
        if( PREFS->date_future_nbdays > 0 )
                filter_preset_daterange_add_futuregap(data->filter, PREFS->date_future_nbdays);
 
-       register_panel_collect_filtered_txn(data->LV_ope);
+       register_panel_collect_filtered_txn(data->LV_ope, TRUE);
        register_panel_listview_populate(data->LV_ope);
        
        g_signal_handler_block(data->CY_range, data->handler_id[HID_RANGE]);
        register_panel_listview_populate(data->LV_ope);
        
        g_signal_handler_block(data->CY_range, data->handler_id[HID_RANGE]);
@@ -626,6 +715,10 @@ gushort lpos = 1;
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(view, GTK_TYPE_WINDOW)), "inst_data");
 
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(view, GTK_TYPE_WINDOW)), "inst_data");
 
+       // noaction if show all account
+       if(data->showall)
+               return;
+
        DB( g_print("\n[account] balance refresh\n") );
 
        balance = data->acc->initial;
        DB( g_print("\n[account] balance refresh\n") );
 
        balance = data->acc->initial;
@@ -677,11 +770,11 @@ gushort lpos = 1;
 }
 
 
 }
 
 
-static void register_panel_collect_filtered_txn(GtkWidget *view)
+static void register_panel_collect_filtered_txn(GtkWidget *view, gboolean emptysearch)
 {
 struct register_panel_data *data;
 {
 struct register_panel_data *data;
-guint i;
-GList *list;
+GList *lst_acc, *lnk_acc;
+GList *lnk_txn;
 
        DB( g_print("\n[register_panel] collect_filtered_txn\n") );
 
 
        DB( g_print("\n[register_panel] collect_filtered_txn\n") );
 
@@ -690,42 +783,48 @@ GList *list;
        if(data->gpatxn != NULL)
                g_ptr_array_free (data->gpatxn, TRUE);
 
        if(data->gpatxn != NULL)
                g_ptr_array_free (data->gpatxn, TRUE);
 
-#if MYDEBUG == 1
-       guint nbtxn = g_queue_get_length (data->acc->txn_queue);
-       g_print(" - nb txn %d\n", nbtxn);
-#endif
-       
+       //todo: why this ?
        data->gpatxn = g_ptr_array_sized_new(64);
 
        data->gpatxn = g_ptr_array_sized_new(64);
 
-       //data->hidden = 0;
-
-       list = g_queue_peek_head_link(data->acc->txn_queue); i=0;
-       while (list != NULL)
+       lst_acc = g_hash_table_get_values(GLOBALS->h_acc);
+       lnk_acc = g_list_first(lst_acc);
+       while (lnk_acc != NULL)
        {
        {
-       Transaction *ope = list->data;
+       Account *acc = lnk_acc->data;
 
 
-               if(filter_test(data->filter, ope) == 1)
-               {
-                       g_ptr_array_add(data->gpatxn, (gpointer)ope);
-               }
-               /*else
-               {
-                       data->hidden++;
-               }*/
+               // skip closed in showall mode
+               if( data->showall == TRUE && (acc->flags & AF_CLOSED) )
+                       goto next_acc;
 
 
-#if MYDEBUG == 1
-               
-               if( !(i % 1000) ) { g_print(" - progress %d/%d\n", i, nbtxn); }
+               // skip other than current in normal mode
+               if( (data->showall == FALSE) && (data->acc != NULL) && (acc->key != data->acc->key) )
+                       goto next_acc;
 
 
-#endif
-               i++;
-               list = g_list_next(list);
-       }
+               lnk_txn = g_queue_peek_head_link(acc->txn_queue);
+               while (lnk_txn != NULL)
+               {
+               Transaction *ope = lnk_txn->data;
 
 
-       g_signal_handler_block(data->ST_search, data->handler_id[HID_SEARCH]);
-       gtk_entry_set_text (GTK_ENTRY(data->ST_search), "");
-       g_signal_handler_unblock(data->ST_search, data->handler_id[HID_SEARCH]);
+                       if(filter_txn_match(data->filter, ope) == 1)
+                       {
+                               //add to the list
+                               g_ptr_array_add(data->gpatxn, (gpointer)ope);
+                       }
+                       lnk_txn = g_list_next(lnk_txn);
+               }
        
        
+       next_acc:
+               lnk_acc = g_list_next(lnk_acc);
+       }
+       g_list_free(lst_acc);
+
+       //#1789698 not always empty
+       if( emptysearch == TRUE )
+       {
+               g_signal_handler_block(data->ST_search, data->handler_id[HID_SEARCH]);
+               gtk_entry_set_text (GTK_ENTRY(data->ST_search), "");
+               g_signal_handler_unblock(data->ST_search, data->handler_id[HID_SEARCH]);
+       }       
 }
 
 
 }
 
 
@@ -788,7 +887,11 @@ guint i, qs_flag;
                                LST_DSPOPE_DATAS, txn,
                                -1);
 
                                LST_DSPOPE_DATAS, txn,
                                -1);
 
-                       data->totalsum += txn->amount;
+                       if( data->showall == FALSE )
+                               data->totalsum += txn->amount;
+                       else
+                               data->totalsum += hb_amount_base (txn->amount, txn->kcur);
+
                        data->total++;
                }
        }
                        data->total++;
                }
        }
@@ -805,6 +908,7 @@ guint i, qs_flag;
                
                daterange = filter_daterange_text_get(data->filter);
                gtk_widget_set_tooltip_markup(GTK_WIDGET(data->CY_range), daterange);
                
                daterange = filter_daterange_text_get(data->filter);
                gtk_widget_set_tooltip_markup(GTK_WIDGET(data->CY_range), daterange);
+
                g_free(daterange);
        }
        
                g_free(daterange);
        }
        
@@ -892,7 +996,7 @@ gboolean valid;
                        LST_DSPOPE_DATAS, &tmp,
                        -1);
 
                        LST_DSPOPE_DATAS, &tmp,
                        -1);
 
-               if( txn == tmp)
+               if( txn == tmp )
                {
                        gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
                        break;
                {
                        gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
                        break;
@@ -955,7 +1059,8 @@ Transaction *txn;
 
        }
 
 
        }
 
-
+       transaction_changed(txn);
+       
        account_balances_add(txn);
        
        /* #492755 let the child transfer unchanged */
        account_balances_add(txn);
        
        /* #492755 let the child transfer unchanged */
@@ -986,6 +1091,17 @@ GList *list;
 }
 
 
 }
 
 
+static void register_panel_add_single_transaction(GtkWindow *window, Transaction *txn)
+{
+struct register_panel_data *data;
+
+       DB( g_print("\n[account] add single txn\n") );
+
+       data = g_object_get_data(G_OBJECT(window), "inst_data");
+
+       txn_list_add_by_value(GTK_TREE_VIEW(data->LV_ope), txn);
+}
+
 
 static void register_panel_action(GtkWidget *widget, gpointer user_data)
 {
 
 static void register_panel_action(GtkWidget *widget, gpointer user_data)
 {
@@ -1019,7 +1135,9 @@ gboolean result;
                                DB( g_print("(transaction) add multiple\n") );
                                src_txn = da_transaction_malloc();
                                src_txn->date = GLOBALS->today;
                                DB( g_print("(transaction) add multiple\n") );
                                src_txn = da_transaction_malloc();
                                src_txn->date = GLOBALS->today;
-                               src_txn->kacc = data->accnum;
+                               if( data->acc != NULL )
+                                       src_txn->kacc = data->acc->key;
+                               da_transaction_set_default_template(src_txn);
                                type = TRANSACTION_EDIT_ADD;
                        }
                        else
                                type = TRANSACTION_EDIT_ADD;
                        }
                        else
@@ -1031,12 +1149,12 @@ gboolean result;
                                type = TRANSACTION_EDIT_INHERIT;
                        }
 
                                type = TRANSACTION_EDIT_INHERIT;
                        }
 
-                       dialog = create_deftransaction_window(GTK_WINDOW(data->window), type, FALSE);
-                       result = GTK_RESPONSE_ADD;
-                       while(result == GTK_RESPONSE_ADD || result == GTK_RESPONSE_ADDKEEP)
+                       dialog = create_deftransaction_window(GTK_WINDOW(data->window), type, FALSE, (data->acc != NULL) ? data->acc->key : 0 );
+                       result = HB_RESPONSE_ADD;
+                       while(result == HB_RESPONSE_ADD || result == HB_RESPONSE_ADDKEEP)
                        {
                                /* clone source transaction */
                        {
                                /* clone source transaction */
-                               if( result == GTK_RESPONSE_ADD )
+                               if( result == HB_RESPONSE_ADD )
                                {
                                        data->cur_ope = da_transaction_clone (src_txn);
 
                                {
                                        data->cur_ope = da_transaction_clone (src_txn);
 
@@ -1047,13 +1165,13 @@ gboolean result;
                                deftransaction_set_transaction(dialog, data->cur_ope);
 
                                result = gtk_dialog_run (GTK_DIALOG (dialog));
                                deftransaction_set_transaction(dialog, data->cur_ope);
 
                                result = gtk_dialog_run (GTK_DIALOG (dialog));
-                               if(result == GTK_RESPONSE_ADD || result == GTK_RESPONSE_ADDKEEP || result == GTK_RESPONSE_ACCEPT)
+                               if(result == HB_RESPONSE_ADD || result == HB_RESPONSE_ADDKEEP || result == GTK_RESPONSE_ACCEPT)
                                {
                                Transaction *add_txn;
                                
                                        deftransaction_get(dialog, NULL);
                                {
                                Transaction *add_txn;
                                
                                        deftransaction_get(dialog, NULL);
-                                       add_txn = transaction_add(data->cur_ope);
-                                       if((data->cur_ope->kacc == data->accnum))
+                                       add_txn = transaction_add(GTK_WINDOW(data->window), data->cur_ope);
+                                       if((data->showall == TRUE) || ( (data->acc != NULL) && (data->cur_ope->kacc == data->acc->key) ) )
                                        {
                                                txn_list_add_by_value(GTK_TREE_VIEW(data->LV_ope), add_txn);
                                                //#1716181 also add to the ptr_array (quickfilter)
                                        {
                                                txn_list_add_by_value(GTK_TREE_VIEW(data->LV_ope), add_txn);
                                                //#1716181 also add to the ptr_array (quickfilter)
@@ -1067,7 +1185,7 @@ gboolean result;
                                        src_txn->date = data->cur_ope->date;
                                }
 
                                        src_txn->date = data->cur_ope->date;
                                }
 
-                               if( result == GTK_RESPONSE_ADD )
+                               if( result == HB_RESPONSE_ADD )
                                {
                                        da_transaction_free (data->cur_ope);
                                }
                                {
                                        da_transaction_free (data->cur_ope);
                                }
@@ -1085,6 +1203,8 @@ gboolean result;
                        {
                Transaction *active_txn;
 
                        {
                Transaction *active_txn;
 
+                       DB( g_print(" - edit\n") );
+                               
                        active_txn = list_txn_get_active_transaction(GTK_TREE_VIEW(data->LV_ope));
                                        
                        if(active_txn)
                        active_txn = list_txn_get_active_transaction(GTK_TREE_VIEW(data->LV_ope));
                                        
                        if(active_txn)
@@ -1104,17 +1224,32 @@ gboolean result;
                                        if(old_txn->date != new_txn->date)
                                                data->do_sort = TRUE;
 
                                        if(old_txn->date != new_txn->date)
                                                data->do_sort = TRUE;
 
-                                       // different account : delete from the display
-                                       if( new_txn->kacc != data->accnum )
+                                       // manage account change
+                                       //maybe this should move to deftransaction_external_edit
+                                       if( data->acc != NULL && (new_txn->kacc != data->acc->key) )
                                        {
                                        {
+                                       Account *nacc;
+                                               
                                                delete_active_transaction(GTK_TREE_VIEW(data->LV_ope));
                                                delete_active_transaction(GTK_TREE_VIEW(data->LV_ope));
+                                               //#1667501 update target account window is open
+                                               nacc = da_acc_get(new_txn->kacc);
+                                               if( nacc->window != NULL )
+                                               {
+                                                       DB( g_print("- account changed and window is open\n") );
+                                                       if( GTK_IS_WINDOW(nacc->window) )
+                                                       {
+                                                               register_panel_add_single_transaction(nacc->window, new_txn);
+                                                               register_panel_update(GTK_WIDGET(nacc->window), GINT_TO_POINTER(UF_BALANCE));
+                                                       }
+                                               }
                                        }
                                        
                                        //da_transaction_copy(new_txn, old_txn);
 
                                        register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
                                        }
                                        
                                        //da_transaction_copy(new_txn, old_txn);
 
                                        register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
-                                       data->acc->flags |= AF_CHANGED;
+                                       transaction_changed(new_txn);
+
                                        GLOBALS->changes_count++;
                                }
 
                                        GLOBALS->changes_count++;
                                }
 
@@ -1125,27 +1260,20 @@ gboolean result;
 
                case ACTION_ACCOUNT_DELETE:
                {
 
                case ACTION_ACCOUNT_DELETE:
                {
-               GtkWidget *p_dialog = NULL;
                GtkTreeModel *model;
                GList *selection, *list;
                gint result;
 
                        DB( g_print(" - delete\n") );
 
                GtkTreeModel *model;
                GList *selection, *list;
                gint result;
 
                        DB( g_print(" - delete\n") );
 
-                       //todo: replace with a call to ui_dialog_msg_question ?
-                       p_dialog = gtk_message_dialog_new
-                       (
-                               GTK_WINDOW(data->window),
-                               GTK_DIALOG_MODAL,
-                               GTK_MESSAGE_WARNING,
-                       GTK_BUTTONS_YES_NO,
-                       _("Do you want to delete\neach of the selected transaction ?")
-                       );
-
-                       result = gtk_dialog_run( GTK_DIALOG( p_dialog ) );
-                       gtk_widget_destroy( p_dialog );
+                       result = ui_dialog_msg_confirm_alert(
+                                       GTK_WINDOW(data->window),
+                                       NULL,
+                                       _("Do you want to delete\neach of the selected transaction ?"),
+                                       _("_Delete")
+                               );
 
 
-                       if(result == GTK_RESPONSE_YES)
+                       if(result == GTK_RESPONSE_OK)
                        {
                                model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope));
                                selection = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)), &model);
                        {
                                model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope));
                                selection = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(data->LV_ope)), &model);
@@ -1166,7 +1294,7 @@ gboolean result;
 
                                        // 1) remove visible current and potential xfer
                                        gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
 
                                        // 1) remove visible current and potential xfer
                                        gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
-                                       if(entry->paymode == PAYMODE_INTXFER)
+                                       if(data->showall && entry->paymode == PAYMODE_INTXFER)
                                        {
                                        Transaction *child = transaction_xfer_child_strong_get(entry);
                                                if( child )
                                        {
                                        Transaction *child = transaction_xfer_child_strong_get(entry);
                                                if( child )
@@ -1226,7 +1354,6 @@ gboolean result;
 
                                register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
 
                                register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
-                               data->acc->flags |= AF_CHANGED;
                                GLOBALS->changes_count++;
                        }
 
                                GLOBALS->changes_count++;
                        }
 
@@ -1248,7 +1375,6 @@ gboolean result;
 
                        register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
 
                        register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
-                       data->acc->flags |= AF_CHANGED;
                        GLOBALS->changes_count++;
                }
                break;
                        GLOBALS->changes_count++;
                }
                break;
@@ -1288,7 +1414,6 @@ gboolean result;
 
                                register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
 
                                register_panel_update(widget, GINT_TO_POINTER(UF_BALANCE));
 
-                               data->acc->flags |= AF_CHANGED;
                                GLOBALS->changes_count++;
                        }
 
                                GLOBALS->changes_count++;
                        }
 
@@ -1299,9 +1424,9 @@ gboolean result;
                case ACTION_ACCOUNT_FILTER:
                {
 
                case ACTION_ACCOUNT_FILTER:
                {
 
-                       if(ui_flt_manage_dialog_new(data->window, data->filter, FALSE) != GTK_RESPONSE_REJECT)
+                       if(ui_flt_manage_dialog_new(GTK_WINDOW(data->window), data->filter, data->showall, TRUE) != GTK_RESPONSE_REJECT)
                        {
                        {
-                               register_panel_collect_filtered_txn(data->LV_ope);
+                               register_panel_collect_filtered_txn(data->LV_ope, TRUE);
                                register_panel_listview_populate(data->LV_ope);
                                register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_SENSITIVE+UF_BALANCE));
 
                                register_panel_listview_populate(data->LV_ope);
                                register_panel_update(data->LV_ope, GINT_TO_POINTER(UF_SENSITIVE+UF_BALANCE));
 
@@ -1379,68 +1504,55 @@ gint count = 0;
                count = gtk_tree_selection_count_selected_rows(selection);
                DB( g_print(" - count = %d\n", count) );
 
                count = gtk_tree_selection_count_selected_rows(selection);
                DB( g_print(" - count = %d\n", count) );
 
-
-       /*
-               if (active = gtk_tree_selection_get_selected(selection, &model, &iter))
-               {
-               gint *indices;
-
-                       path = gtk_tree_model_get_path(model, &iter);
-                       indices = gtk_tree_path_get_indices(path);
-
-                       data->accnum = indices[0];
-
-                       DB( g_print(" active is %d, sel=%d\n", indices[0], active) );
-               }
-               */
+               //showall part
+               sensitive = !data->showall;
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/AccountMenu/ExportPDF"), sensitive);
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/AccountMenu/ExportQIF"), sensitive);
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/AccountMenu/ExportCSV"), sensitive);
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/ChkIntXfer"), sensitive);
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/DuplicateMark"), sensitive);
+               //gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/DuplicateClear"), sensitive);
 
                //5.3.1 if closed account : disable any change
 
                //5.3.1 if closed account : disable any change
-               if( data->acc->flags & AF_CLOSED )
-               {
-                       gtk_widget_set_sensitive (data->TB_bar, FALSE);
-                       //gtk_widget_set_sensitive (data->TB_tools, FALSE);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/ToolBar/Assign"), FALSE);
-                       
-                       gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu"), FALSE);
-                       gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/ToolsMenu"), FALSE);
+               sensitive =  TRUE;
+               if( (data->showall == FALSE) && (data->acc->flags & AF_CLOSED) )
+                       sensitive = FALSE;
                
                
-               }
-               else
-               {
-                       gtk_widget_set_sensitive (data->TB_bar, TRUE);
-                       //gtk_widget_set_sensitive (data->TB_tools, TRUE);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/ToolBar/Assign"), TRUE);
-
-                       gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu"), TRUE);
-                       gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/ToolsMenu"), TRUE);
-
-
-                       // multiple: disable inherit, edit
-                       sensitive = (count != 1 ) ? FALSE : TRUE;
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Inherit"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Edit"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Inherit"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Edit"), sensitive);
-
-                       // single: disable multiedit
-                       sensitive = (count <= 1 ) ? FALSE : TRUE;
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/MultiEdit"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/MultiEdit"), sensitive);
-
-                       // no selection: disable reconcile, delete
-                       sensitive = (count > 0 ) ? TRUE : FALSE;
-                       gtk_widget_set_sensitive (gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu/TxnStatusMenu"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Delete"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Template"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Delete"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Cleared"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Reconciled"), sensitive);
-                       gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Template"), sensitive);
-
-                       // euro convert
-                       sensitive = PREFS->euro_active;
-                       gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/ConvToEuro"), sensitive);
-               }
+               gtk_widget_set_sensitive (data->TB_bar, sensitive);
+               //gtk_widget_set_sensitive (data->TB_tools, sensitive);
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/ToolBar/Assign"), data->showall ? FALSE : sensitive);
+
+               gtk_widget_set_sensitive(gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu"), sensitive);
+               gtk_widget_set_sensitive(gtk_ui_manager_get_widget(data->ui, "/MenuBar/ToolsMenu"), sensitive);
+
+               // multiple: disable inherit, edit
+               sensitive = (count != 1 ) ? FALSE : TRUE;
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Inherit"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Edit"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Inherit"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Edit"), sensitive);
+
+               // single: disable multiedit
+               sensitive = (count <= 1 ) ? FALSE : TRUE;
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/MultiEdit"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/MultiEdit"), sensitive);
+
+               // no selection: disable reconcile, delete
+               sensitive = (count > 0 ) ? TRUE : FALSE;
+               gtk_widget_set_sensitive(gtk_ui_manager_get_widget(data->ui, "/MenuBar/TxnMenu/TxnStatusMenu"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Delete"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/MenuBar/TxnMenu/Template"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Delete"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Cleared"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Reconciled"), sensitive);
+               gtk_action_set_sensitive(gtk_ui_manager_get_action(data->ui, "/TxnBar/Template"), sensitive);
+
+               // euro convert
+               sensitive = (data->showall == TRUE) ? FALSE : PREFS->euro_active;
+               if( (data->acc != NULL) && currency_is_euro(data->acc->kcur) )
+                       sensitive = FALSE;
+               gtk_action_set_visible(gtk_ui_manager_get_action(data->ui, "/MenuBar/ToolsMenu/ConvToEuro"), sensitive);
+
        }
 
        /* update toolbar & list */
        }
 
        /* update toolbar & list */
@@ -1469,15 +1581,42 @@ gint count = 0;
        {
                DB( g_print(" - UF_BALANCE\n") );
 
        {
                DB( g_print(" - UF_BALANCE\n") );
 
-               register_panel_balance_refresh(widget);
-               
-               hb_label_set_colvalue(GTK_LABEL(data->TX_balance[0]), data->acc->bal_bank, data->acc->kcur, GLOBALS->minor);
-               hb_label_set_colvalue(GTK_LABEL(data->TX_balance[1]), data->acc->bal_today, data->acc->kcur, GLOBALS->minor);
-               hb_label_set_colvalue(GTK_LABEL(data->TX_balance[2]), data->acc->bal_future, data->acc->kcur, GLOBALS->minor);
+               if(data->showall == FALSE)
+               {
+               Account *acc = data->acc;
 
 
-               ui_mainwindow_populate_accounts(GLOBALS->mainwindow, NULL);
-       }
+                       register_panel_balance_refresh(widget);
+                       hb_label_set_colvalue(GTK_LABEL(data->TX_balance[0]), acc->bal_bank, acc->kcur, GLOBALS->minor);
+                       hb_label_set_colvalue(GTK_LABEL(data->TX_balance[1]), acc->bal_today, acc->kcur, GLOBALS->minor);
+                       hb_label_set_colvalue(GTK_LABEL(data->TX_balance[2]), acc->bal_future, acc->kcur, GLOBALS->minor);
+               }
+               else
+               {
+               GList *lst_acc, *lnk_acc;
+               gdouble bank, today, future;
+       
+                       bank = today = future = 0.0;
+                       lst_acc = g_hash_table_get_values(GLOBALS->h_acc);
+                       lnk_acc = g_list_first(lst_acc);
+                       while (lnk_acc != NULL)
+                       {
+                       Account *acc = lnk_acc->data;
 
 
+                               bank += hb_amount_base(acc->bal_bank, acc->kcur);
+                               today += hb_amount_base(acc->bal_today, acc->kcur);
+                               future += hb_amount_base(acc->bal_future, acc->kcur);
+                               
+                               lnk_acc = g_list_next(lnk_acc);
+                       }
+                       g_list_free(lst_acc);
+               
+                       hb_label_set_colvalue(GTK_LABEL(data->TX_balance[0]), bank, GLOBALS->kcur, GLOBALS->minor);
+                       hb_label_set_colvalue(GTK_LABEL(data->TX_balance[1]), today, GLOBALS->kcur, GLOBALS->minor);
+                       hb_label_set_colvalue(GTK_LABEL(data->TX_balance[2]), future, GLOBALS->kcur, GLOBALS->minor);
+               }
+               ui_hub_account_populate(GLOBALS->mainwindow, NULL);
+       }
+       
        /* update fltinfo */
        DB( g_print(" - statusbar\n") );
 
        /* update fltinfo */
        DB( g_print(" - statusbar\n") );
 
@@ -1491,6 +1630,11 @@ gint count = 0;
        gchar buf1[64];
        gchar buf2[64];
        gchar buf3[64];
        gchar buf1[64];
        gchar buf2[64];
        gchar buf3[64];
+       gchar fbufavg[64];
+       guint32 kcur;
+
+       kcur = (data->showall == TRUE) ? GLOBALS->kcur : data->acc->kcur;
+
 
        if( count >= 1 )
        {
 
        if( count >= 1 )
        {
@@ -1499,9 +1643,7 @@ gint count = 0;
        GtkTreeIter iter;
 
                model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope));
        GtkTreeIter iter;
 
                model = gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope));
-
                list = gtk_tree_selection_get_selected_rows(selection, &model);
                list = gtk_tree_selection_get_selected_rows(selection, &model);
-
                tmplist = g_list_first(list);
                while (tmplist != NULL)
                {
                tmplist = g_list_first(list);
                while (tmplist != NULL)
                {
@@ -1510,10 +1652,20 @@ gint count = 0;
                        gtk_tree_model_get_iter(model, &iter, tmplist->data);
                        gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, &item, -1);
 
                        gtk_tree_model_get_iter(model, &iter, tmplist->data);
                        gtk_tree_model_get(model, &iter, LST_DSPOPE_DATAS, &item, -1);
 
-                       if( item->flags & OF_INCOME )
-                               opeinc += item->amount;
+                       if( data->showall == FALSE )
+                       {
+                               if( item->flags & OF_INCOME )
+                                       opeinc += item->amount;
+                               else
+                                       opeexp += item->amount;
+                       }
                        else
                        else
-                               opeexp += item->amount;
+                       {
+                               if( item->flags & OF_INCOME )
+                                       opeinc += hb_amount_base(item->amount, item->kcur);
+                               else
+                                       opeexp += hb_amount_base(item->amount, item->kcur);
+                       }
 
                        DB( g_print(" - %s, %.2f\n", item->memo, item->amount ) );
 
 
                        DB( g_print(" - %s, %.2f\n", item->memo, item->amount ) );
 
@@ -1523,23 +1675,21 @@ gint count = 0;
 
                DB( g_print(" %f - %f = %f\n", opeinc, opeexp, opeinc + opeexp) );
 
 
                DB( g_print(" %f - %f = %f\n", opeinc, opeexp, opeinc + opeexp) );
 
-               hb_strfmon(buf1, 64-1, opeinc, data->acc->kcur, GLOBALS->minor);
-               hb_strfmon(buf2, 64-1, -opeexp, data->acc->kcur, GLOBALS->minor);
-               hb_strfmon(buf3, 64-1, opeinc + opeexp, data->acc->kcur, GLOBALS->minor);
+
+               hb_strfmon(buf1, 64-1, opeinc, kcur, GLOBALS->minor);
+               hb_strfmon(buf2, 64-1, -opeexp, kcur, GLOBALS->minor);
+               hb_strfmon(buf3, 64-1, opeinc + opeexp, kcur, GLOBALS->minor);
+               hb_strfmon(fbufavg, 64-1, (opeinc + opeexp) / count, kcur, GLOBALS->minor);
        }
 
        gchar *msg;
 
        }
 
        gchar *msg;
 
-       if( count <= 0 )
+       if( count <= 1 )
        {
        {
-               //msg = g_strdup_printf (_("transaction selected: %d, hidden: %d"), count, data->hidden);
-               hb_strfmon(buf3, 64-1, data->totalsum, data->acc->kcur, GLOBALS->minor);
-               msg = g_strdup_printf(_("%d items (%s)"), data->total, buf3);
+               msg = g_strdup_printf(_("%d transactions"), data->total);
        }
        else
        }
        else
-               //TRANSLATORS: detail of the 3 %s which are some amount of selected transaction, 1=total 2=income, 3=expense
-               //msg = g_strdup_printf (_("transaction selected: %d, hidden: %d / %s ( %s - %s)"), count, data->hidden, buf3, buf1, buf2);
-               msg = g_strdup_printf(_("%d items (%d selected %s)"), data->total, count, buf3);
+               msg = g_strdup_printf(_("%d transactions, %d selected, avg: %s, sum: %s (%s - %s)"), data->total, count, fbufavg, buf3, buf1, buf2);
 
        gtk_label_set_markup(GTK_LABEL(data->TX_selection), msg);
        g_free (msg);
 
        gtk_label_set_markup(GTK_LABEL(data->TX_selection), msg);
        g_free (msg);
@@ -1558,7 +1708,7 @@ Transaction *ope;
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(treeview), GTK_TYPE_WINDOW)), "inst_data");
 
        //5.3.1 if closed account : disable any change
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(GTK_WIDGET(treeview), GTK_TYPE_WINDOW)), "inst_data");
 
        //5.3.1 if closed account : disable any change
-       if( data->acc->flags & AF_CLOSED )
+       if( (data->showall == FALSE) && (data->acc->flags & AF_CLOSED) )
                return;
 
 
                return;
 
 
@@ -1581,9 +1731,12 @@ Transaction *ope;
        }
        else
        {
        }
        else
        {
-               if(col_id >= LST_DSPOPE_DATE && col_id != LST_DSPOPE_BALANCE)
+               if( data->showall == FALSE )
                {
                {
-                       register_panel_edit_multiple (data->window, ope, col_id, data);
+                       if(col_id >= LST_DSPOPE_DATE && col_id != LST_DSPOPE_BALANCE)
+                       {
+                               register_panel_edit_multiple (data->window, ope, col_id, data);
+                       }
                }
        }
 }
                }
        }
 }
@@ -1628,26 +1781,26 @@ static gint listview_context_cb (GtkWidget *widget, GdkEventButton *event, GtkWi
 void register_panel_window_init(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
 void register_panel_window_init(GtkWidget *widget, gpointer user_data)
 {
 struct register_panel_data *data;
-gchar *name;
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
        DB( g_print("\n[account] init window\n") );
 
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
        DB( g_print("\n[account] init window\n") );
 
-       if( data->acc->flags & AF_CLOSED )
+       if( data->showall == TRUE )
        {
        {
-               name = g_strdup_printf(_("[closed account] %s"), data->acc->name);
-               gtk_label_set_text (GTK_LABEL(data->LB_name), name);
-               g_free(name);
+               gtk_label_set_text (GTK_LABEL(data->LB_name), _("All transactions"));
+               hb_widget_visible (data->IM_closed, FALSE);
        }
        else
        {
                gtk_label_set_text (GTK_LABEL(data->LB_name), data->acc->name);
                hb_widget_visible (data->IM_closed, (data->acc->flags & AF_CLOSED) ? TRUE : FALSE);
        }
        else
        {
                gtk_label_set_text (GTK_LABEL(data->LB_name), data->acc->name);
                hb_widget_visible (data->IM_closed, (data->acc->flags & AF_CLOSED) ? TRUE : FALSE);
+
+               DB( g_print(" - sort transactions\n") );
+               da_transaction_queue_sort(data->acc->txn_queue);
        }
 
        }
 
-       DB( g_print(" - sort transactions\n") );
-       da_transaction_queue_sort(data->acc->txn_queue);
+       list_txn_set_column_acc_visible(GTK_TREE_VIEW(data->LV_ope), data->showall);
 
        //DB( g_print(" mindate=%d, maxdate=%d %x\n", data->filter->mindate,data->filter->maxdate) );
 
 
        //DB( g_print(" mindate=%d, maxdate=%d %x\n", data->filter->mindate,data->filter->maxdate) );
 
@@ -1715,8 +1868,10 @@ struct register_panel_data *data;
        GLOBALS->define_off--;
 
        /* unset transaction edit mutex */
        GLOBALS->define_off--;
 
        /* unset transaction edit mutex */
-       if(data->acc)
+       if(data->showall == FALSE)
                data->acc->window = NULL;
                data->acc->window = NULL;
+       else
+               GLOBALS->alltxnwindow = NULL;
 
        /* free title and filter */
        DB( g_print(" user_data=%p to be free\n", user_data) );
 
        /* free title and filter */
        DB( g_print(" user_data=%p to be free\n", user_data) );
@@ -1725,7 +1880,7 @@ struct register_panel_data *data;
        if(data->gpatxn != NULL)
                g_ptr_array_free (data->gpatxn, TRUE);
 
        if(data->gpatxn != NULL)
                g_ptr_array_free (data->gpatxn, TRUE);
 
-       da_filter_free(data->filter);
+       da_flt_free(data->filter);
 
        g_free(data);
 
 
        g_free(data);
 
@@ -1752,14 +1907,13 @@ static GtkActionEntry entries[] = {
        { "TxnMenu"      , NULL, N_("Transacti_on"), NULL, NULL, NULL },
        { "TxnStatusMenu", NULL, N_("_Status"), NULL, NULL, NULL },
        { "ToolsMenu"    , NULL, N_("_Tools"), NULL, NULL, NULL },
        { "TxnMenu"      , NULL, N_("Transacti_on"), NULL, NULL, NULL },
        { "TxnStatusMenu", NULL, N_("_Status"), NULL, NULL, NULL },
        { "ToolsMenu"    , NULL, N_("_Tools"), NULL, NULL, NULL },
-       /* = = = = = = = = future version = = = = = = = = */
-       { "TestingMenu"  , NULL, "Testing", NULL, NULL, NULL },
-
-       { "Close"           , ICONNAME_CLOSE            , N_("_Close")                          , "<control>W", N_("Close the current account"),                G_CALLBACK (register_panel_action_close) },
 
 
+       
        /* name, icon-name, label, accelerator, tooltip */
        /* name, icon-name, label, accelerator, tooltip */
-       { "Filter"              , ICONNAME_HB_FILTER        , N_("_Filter..."), NULL,                   N_("Open the list filter"), G_CALLBACK (register_panel_action_editfilter) },
-       { "ConvToEuro"  , NULL                      , N_("Convert to Euro..."), NULL,   N_("Convert this account to Euro currency"), G_CALLBACK (register_panel_action_converttoeuro) },
+       { "ExportPDF"   , NULL                          , N_("Export as PDF..."), NULL,         N_("Export to a PDF file"), G_CALLBACK (register_panel_action_exportpdf) },
+       { "ExportQIF"   , NULL                                          , N_("Export QIF..."), NULL,            N_("Export as QIF"), G_CALLBACK (register_panel_action_exportqif) },
+       { "ExportCSV"   , NULL                                          , N_("Export CSV..."), NULL,            N_("Export as CSV"), G_CALLBACK (register_panel_action_exportcsv) },
+       { "Close"           , ICONNAME_CLOSE            , N_("_Close")                          , "<control>W", N_("Close the current account"),                G_CALLBACK (register_panel_action_close) },
 
        { "Add"                 , ICONNAME_HB_OPE_ADD       , N_("_Add..."), NULL,              N_("Add a new transaction"), G_CALLBACK (register_panel_action_add) },
        { "Inherit"             , ICONNAME_HB_OPE_HERIT     , N_("_Inherit..."), NULL, N_("Inherit from the active transaction"), G_CALLBACK (register_panel_action_inherit) },
 
        { "Add"                 , ICONNAME_HB_OPE_ADD       , N_("_Add..."), NULL,              N_("Add a new transaction"), G_CALLBACK (register_panel_action_add) },
        { "Inherit"             , ICONNAME_HB_OPE_HERIT     , N_("_Inherit..."), NULL, N_("Inherit from the active transaction"), G_CALLBACK (register_panel_action_inherit) },
@@ -1773,29 +1927,30 @@ static GtkActionEntry entries[] = {
        { "Template"    , ICONNAME_CONVERT          , N_("Create template..."), NULL,           N_("Create template"), G_CALLBACK (register_panel_action_createtemplate) },
        { "Delete"              , ICONNAME_HB_OPE_DELETE    , N_("_Delete..."), NULL,           N_("Delete selected transaction(s)"), G_CALLBACK (register_panel_action_remove) },
 
        { "Template"    , ICONNAME_CONVERT          , N_("Create template..."), NULL,           N_("Create template"), G_CALLBACK (register_panel_action_createtemplate) },
        { "Delete"              , ICONNAME_HB_OPE_DELETE    , N_("_Delete..."), NULL,           N_("Delete selected transaction(s)"), G_CALLBACK (register_panel_action_remove) },
 
-       { "Assign"              , ICONNAME_HB_ASSIGN_RUN    , N_("Auto. assignments"), NULL,    N_("Run automatic assignments"), G_CALLBACK (register_panel_action_assign) },
-       { "ExportQIF"   , NULL                                          , N_("Export QIF..."), NULL,            N_("Export as QIF"), G_CALLBACK (register_panel_action_exportqif) },
-       { "ExportCSV"   , NULL                                          , N_("Export CSV..."), NULL,            N_("Export as CSV"), G_CALLBACK (register_panel_action_exportcsv) },
+       { "DuplicateMark", NULL                      , N_("Mark duplicate..."), NULL,   NULL, G_CALLBACK (register_panel_action_duplicate_mark) },
+//     { "DuplicateClear", NULL                      , N_("Unmark duplicate"), NULL,   NULL, G_CALLBACK (register_panel_action_duplicate_unmark) },
 
 
-       { "ChkIntXfer"  , NULL                      , N_("Check internal xfer..."), NULL,       NULL, G_CALLBACK (register_panel_action_check_internal_xfer) },
+       { "ChkIntXfer"  , NULL                      , N_("Check internal xfer"), NULL,  NULL, G_CALLBACK (register_panel_action_check_internal_xfer) },
+       { "Assign"              , ICONNAME_HB_ASSIGN_RUN    , N_("Auto. assignments"), NULL,    N_("Run automatic assignments"), G_CALLBACK (register_panel_action_assign) },
 
 
-/* = = = = = = = = future version = = = = = = = = */
-       { "ExportPDF"           , ICONNAME_PRINT                , N_("Export PDF..."), NULL,            N_("Export as PDF"), G_CALLBACK (register_panel_action_exportpdf) },
+       { "Filter"              , ICONNAME_HB_FILTER        , N_("_Filter..."), NULL,                   N_("Open the list filter"), G_CALLBACK (register_panel_action_editfilter) },
+       { "ConvToEuro"  , NULL                      , N_("Convert to Euro..."), NULL,   N_("Convert this account to Euro currency"), G_CALLBACK (register_panel_action_converttoeuro) },
 
 };
 static guint n_entries = G_N_ELEMENTS (entries);
 
 
 };
 static guint n_entries = G_N_ELEMENTS (entries);
 
+
 static const gchar *ui_info =
 "<ui>"
 "<menubar name='MenuBar'>"
 static const gchar *ui_info =
 "<ui>"
 "<menubar name='MenuBar'>"
-
 "      <menu action='AccountMenu'>"
 "              <menuitem action='ExportQIF'/>"
 "              <menuitem action='ExportCSV'/>"
 "                      <separator/>"
 "      <menu action='AccountMenu'>"
 "              <menuitem action='ExportQIF'/>"
 "              <menuitem action='ExportCSV'/>"
 "                      <separator/>"
+"              <menuitem action='ExportPDF'/>"
+"                      <separator/>"
 "              <menuitem action='Close'/>"
 "      </menu>"
 "              <menuitem action='Close'/>"
 "      </menu>"
-
 "      <menu action='TxnMenu'>"
 "              <menuitem action='Add'/>"
 "              <menuitem action='Inherit'/>"
 "      <menu action='TxnMenu'>"
 "              <menuitem action='Add'/>"
 "              <menuitem action='Inherit'/>"
@@ -1806,25 +1961,22 @@ static const gchar *ui_info =
 "                      <menuitem action='Cleared'/>"
 "                      <menuitem action='Reconciled'/>"
 "         </menu>"
 "                      <menuitem action='Cleared'/>"
 "                      <menuitem action='Reconciled'/>"
 "         </menu>"
+"                      <separator/>"
 "              <menuitem action='MultiEdit'/>"
 "              <menuitem action='Template'/>"
 "              <menuitem action='Delete'/>"
 "      </menu>"
 "              <menuitem action='MultiEdit'/>"
 "              <menuitem action='Template'/>"
 "              <menuitem action='Delete'/>"
 "      </menu>"
-
 "      <menu action='ToolsMenu'>"
 "      <menu action='ToolsMenu'>"
-"              <menuitem action='Filter'/>"
-"              <menuitem action='Assign'/>"
+"              <menuitem action='DuplicateMark'/>"
+//"            <menuitem action='DuplicateClear'/>"
 "                      <separator/>"
 "              <menuitem action='ChkIntXfer'/>"
 "                      <separator/>"
 "              <menuitem action='ChkIntXfer'/>"
-
 "              <separator/>"
 "              <separator/>"
+"              <menuitem action='Filter'/>"
+"              <menuitem action='Assign'/>"
+"                      <separator/>"
 "              <menuitem action='ConvToEuro'/>"
 "      </menu>"
 "              <menuitem action='ConvToEuro'/>"
 "      </menu>"
-
-"      <menu action='TestingMenu'>"
-"              <menuitem action='ExportPDF'/>"
-"      </menu>"
-
 "</menubar>"
 
 "<toolbar name='TxnBar'>"
 "</menubar>"
 
 "<toolbar name='TxnBar'>"
@@ -1846,12 +1998,15 @@ static const gchar *ui_info =
 "</ui>";
 
 
 "</ui>";
 
 
-GtkWidget *register_panel_window_new(guint32 accnum, Account *acc)
+/*
+ * if accnum = 0 or acc is null : show all account 
+ */
+GtkWidget *register_panel_window_new(Account *acc)
 {
 struct register_panel_data *data;
 struct WinGeometry *wg;
 {
 struct register_panel_data *data;
 struct WinGeometry *wg;
-GtkWidget *window, *mainbox, *table, *sw;
-GtkWidget *treeview, *label, *widget;
+GtkWidget *window, *mainbox, *table, *sw, *bar;
+GtkWidget *treeview, *label, *widget, *image;
 //GtkWidget *menu, *menu_items;
 GtkUIManager *ui;
 GtkActionGroup *actions;
 //GtkWidget *menu, *menu_items;
 GtkUIManager *ui;
 GtkActionGroup *actions;
@@ -1867,43 +2022,46 @@ GError *error = NULL;
        GLOBALS->define_off++;
        ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_SENSITIVE));
 
        GLOBALS->define_off++;
        ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_SENSITIVE));
 
-               /* create window, etc */
-               window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+       /* create window, etc */
+       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        data->window = window;
 
        data->window = window;
 
-       //debug
-       data->wintitle = NULL;
-       data->accnum = accnum;
-       data->acc = acc;
+       //store our window private data
+       g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)data);
+       DB( g_print(" - new window=%p, inst_data=%p\n", window, data) );
 
 
-       /* set transaction edit mutex */
-       if(data->acc)
+       data->acc = acc;
+       data->showall = (acc != NULL) ? FALSE : TRUE;
+       
+       if(data->showall == FALSE)
+       {
                data->acc->window = GTK_WINDOW(window);
                data->acc->window = GTK_WINDOW(window);
+               if( data->acc->flags & AF_CLOSED )
+                       data->wintitle = g_strdup_printf("%s %s - HomeBank", data->acc->name, _("(closed)"));
+               else
+                       data->wintitle = g_strdup_printf("%s - HomeBank", data->acc->name);
+       }
+       else
+       {
+               GLOBALS->alltxnwindow = window;
+               data->wintitle = g_strdup_printf(_("%s - HomeBank"), _("All transactions"));
+       }
 
 
-       //g_free(data->wintitle);
-       data->wintitle = g_strdup_printf("%s - HomeBank", data->acc->name);
        gtk_window_set_title (GTK_WINDOW (window), data->wintitle);
        gtk_window_set_title (GTK_WINDOW (window), data->wintitle);
+       gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_OPE_SHOW );
 
        // connect our dispose function
 
        // connect our dispose function
-               g_signal_connect (window, "delete-event",
+       g_signal_connect (window, "delete-event",
                G_CALLBACK (register_panel_dispose), (gpointer)data);
 
        // connect our dispose function
                G_CALLBACK (register_panel_dispose), (gpointer)data);
 
        // connect our dispose function
-               g_signal_connect (window, "destroy",
+       g_signal_connect (window, "destroy",
                G_CALLBACK (register_panel_destroy), (gpointer)data);
 
        // connect our dispose function
                G_CALLBACK (register_panel_destroy), (gpointer)data);
 
        // connect our dispose function
-               g_signal_connect (window, "configure-event",
+       g_signal_connect (window, "configure-event",
                G_CALLBACK (register_panel_getgeometry), (gpointer)data);
 
                G_CALLBACK (register_panel_getgeometry), (gpointer)data);
 
-       //store our window private data
-       g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)data);
-       DB( g_print(" - new window=%p, inst_data=%p\n", window, data) );
-
-       //set the window icon
-       gtk_window_set_icon_name(GTK_WINDOW (window), ICONNAME_HB_OPE_SHOW );
-
-
 #if UI == 1
        //start test uimanager
 
 #if UI == 1
        //start test uimanager
 
@@ -1956,12 +2114,30 @@ GError *error = NULL;
 #endif
 
        mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
 #endif
 
        mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+       //gtk_container_set_border_width(GTK_CONTAINER(mainbox), SPACING_SMALL);
        gtk_container_add (GTK_CONTAINER (window), mainbox);
 
        widget = gtk_ui_manager_get_widget (ui, "/MenuBar");
        //data->menu = widget;
        gtk_box_pack_start (GTK_BOX (mainbox), widget, FALSE, FALSE, 0);
 
        gtk_container_add (GTK_CONTAINER (window), mainbox);
 
        widget = gtk_ui_manager_get_widget (ui, "/MenuBar");
        //data->menu = widget;
        gtk_box_pack_start (GTK_BOX (mainbox), widget, FALSE, FALSE, 0);
 
+       // info bar for duplicate
+       bar = gtk_info_bar_new_with_buttons (_("_Refresh"), HB_RESPONSE_REFRESH, NULL);
+       data->IB_duplicate = bar;
+       gtk_box_pack_start (GTK_BOX (mainbox), bar, FALSE, FALSE, 0);
+
+       gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_WARNING);
+       gtk_info_bar_set_show_close_button (GTK_INFO_BAR (bar), TRUE);
+       label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_WARNING");
+       data->LB_duplicate = label;
+      gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+      gtk_label_set_xalign (GTK_LABEL (label), 0);
+      gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
+
+               widget = make_numeric(NULL, 0, HB_DATE_MAX_GAP);
+               data->NB_txn_daygap = widget;
+               gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), widget, FALSE, FALSE, 0);
+
        table = gtk_grid_new();
        gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
        table = gtk_grid_new();
        gtk_grid_set_row_spacing (GTK_GRID (table), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (table), SPACING_MEDIUM);
@@ -2001,7 +2177,7 @@ GError *error = NULL;
        gtk_grid_attach (GTK_GRID(table), widget, 8, 0, 1, 1);
 
        //quick search
        gtk_grid_attach (GTK_GRID(table), widget, 8, 0, 1, 1);
 
        //quick search
-       widget = make_search (NULL);
+       widget = make_search ();
        data->ST_search = widget;
        gtk_widget_set_size_request(widget, HB_MINWIDTH_SEARCH, -1);
        gtk_grid_attach (GTK_GRID(table), widget, 9, 0, 1, 1);
        data->ST_search = widget;
        gtk_widget_set_size_request(widget, HB_MINWIDTH_SEARCH, -1);
        gtk_grid_attach (GTK_GRID(table), widget, 9, 0, 1, 1);
@@ -2016,25 +2192,32 @@ GError *error = NULL;
        gtk_container_set_border_width (GTK_CONTAINER(table), SPACING_SMALL);
        gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0);
 
        gtk_container_set_border_width (GTK_CONTAINER(table), SPACING_SMALL);
        gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0);
 
-       
        label = make_label_widget(_("_Range:"));
        gtk_grid_attach (GTK_GRID(table), label, 0, 0, 1, 1);
        data->CY_range = make_daterange(label, TRUE);
        gtk_grid_attach (GTK_GRID(table), data->CY_range, 1, 0, 1, 1);
 
        label = make_label_widget(_("_Range:"));
        gtk_grid_attach (GTK_GRID(table), label, 0, 0, 1, 1);
        data->CY_range = make_daterange(label, TRUE);
        gtk_grid_attach (GTK_GRID(table), data->CY_range, 1, 0, 1, 1);
 
+       widget = gtk_toggle_button_new();
+       image = gtk_image_new_from_icon_name (ICONNAME_HB_OPE_FUTURE, GTK_ICON_SIZE_MENU);
+       g_object_set (widget, "image", image,  NULL);
+       gtk_widget_set_tooltip_text (widget, _("Toggle show future transaction"));
+       data->CM_future = widget;
+       gtk_grid_attach (GTK_GRID(table), widget, 2, 0, 1, 1);
+
        label = make_label_widget(_("_Type:"));
        label = make_label_widget(_("_Type:"));
-       gtk_grid_attach (GTK_GRID(table), label, 2, 0, 1, 1);
+       gtk_grid_attach (GTK_GRID(table), label, 3, 0, 1, 1);
        data->CY_type = make_cycle(label, CYA_FLT_TYPE);
        data->CY_type = make_cycle(label, CYA_FLT_TYPE);
-       gtk_grid_attach (GTK_GRID(table), data->CY_type, 3, 0, 1, 1);
+       gtk_grid_attach (GTK_GRID(table), data->CY_type, 4, 0, 1, 1);
 
        label = make_label_widget(_("_Status:"));
 
        label = make_label_widget(_("_Status:"));
-       gtk_grid_attach (GTK_GRID(table), label, 4, 0, 1, 1);
+       gtk_grid_attach (GTK_GRID(table), label, 5, 0, 1, 1);
        data->CY_status = make_cycle(label, CYA_FLT_STATUS);
        data->CY_status = make_cycle(label, CYA_FLT_STATUS);
-       gtk_grid_attach (GTK_GRID(table), data->CY_status, 5, 0, 1, 1);
+       gtk_grid_attach (GTK_GRID(table), data->CY_status, 6, 0, 1, 1);
 
 
-       widget = gtk_button_new_with_mnemonic (_("Reset _filters"));
+       //widget = gtk_button_new_with_mnemonic (_("Reset _filters"));
+       widget = gtk_button_new_with_mnemonic (_("_Reset"));
        data->BT_reset = widget;
        data->BT_reset = widget;
-       gtk_grid_attach (GTK_GRID(table), widget, 6, 0, 1, 1);
+       gtk_grid_attach (GTK_GRID(table), widget, 7, 0, 1, 1);
 
        //TRANSLATORS: this is for Euro specific users, a toggle to display in 'Minor' currency
        widget = gtk_check_button_new_with_mnemonic (_("Euro _minor"));
 
        //TRANSLATORS: this is for Euro specific users, a toggle to display in 'Minor' currency
        widget = gtk_check_button_new_with_mnemonic (_("Euro _minor"));
@@ -2102,15 +2285,21 @@ GError *error = NULL;
     #endif
 
        //todo: should move this
     #endif
 
        //todo: should move this
-       gtk_widget_grab_focus(GTK_WIDGET(data->LV_ope));
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_minor),GLOBALS->minor);
+       //setup
        g_object_set_data(G_OBJECT(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope))), "minor", data->CM_minor);
        g_object_set_data(G_OBJECT(gtk_tree_view_get_model(GTK_TREE_VIEW(data->LV_ope))), "minor", data->CM_minor);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_future), (PREFS->date_future_nbdays > 0) ? TRUE : FALSE );
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_minor), GLOBALS->minor);
+       gtk_widget_grab_focus(GTK_WIDGET(data->LV_ope));
 
        // connect signals
 
        // connect signals
-       data->handler_id[HID_RANGE]     = g_signal_connect (data->CY_range , "changed", G_CALLBACK (register_panel_cb_filter_daterange), NULL);
+       g_signal_connect (data->IB_duplicate    , "response", G_CALLBACK (register_panel_cb_bar_duplicate_response), NULL);
+
+       data->handler_id[HID_RANGE]      = g_signal_connect (data->CY_range , "changed", G_CALLBACK (register_panel_cb_filter_daterange), NULL);
        data->handler_id[HID_TYPE]       = g_signal_connect (data->CY_type      , "changed", G_CALLBACK (register_panel_cb_filter_type), NULL);
        data->handler_id[HID_STATUS] = g_signal_connect (data->CY_status, "changed", G_CALLBACK (register_panel_cb_filter_status), NULL);
 
        data->handler_id[HID_TYPE]       = g_signal_connect (data->CY_type      , "changed", G_CALLBACK (register_panel_cb_filter_type), NULL);
        data->handler_id[HID_STATUS] = g_signal_connect (data->CY_status, "changed", G_CALLBACK (register_panel_cb_filter_status), NULL);
 
+       g_signal_connect (data->CM_future, "toggled", G_CALLBACK (register_panel_cb_filter_daterange), NULL);
+
        g_signal_connect (data->BT_reset , "clicked", G_CALLBACK (register_panel_cb_filter_reset), NULL);
 
        g_signal_connect (data->CM_minor , "toggled", G_CALLBACK (register_panel_toggle_minor), NULL);
        g_signal_connect (data->BT_reset , "clicked", G_CALLBACK (register_panel_cb_filter_reset), NULL);
 
        g_signal_connect (data->CM_minor , "toggled", G_CALLBACK (register_panel_toggle_minor), NULL);
@@ -2148,13 +2337,18 @@ GError *error = NULL;
                gtk_window_maximize(GTK_WINDOW(window));
        
        gtk_widget_show_all (window);
                gtk_window_maximize(GTK_WINDOW(window));
        
        gtk_widget_show_all (window);
+       gtk_widget_hide(data->IB_duplicate);
+       
+       /* hide showfuture */
+       hb_widget_visible (data->CM_future, PREFS->date_future_nbdays > 0 ? TRUE : FALSE);
+
 
        /* make sure splash is up */
        while (gtk_events_pending ())
                gtk_main_iteration ();
 
        /* setup to moove later */
 
        /* make sure splash is up */
        while (gtk_events_pending ())
                gtk_main_iteration ();
 
        /* setup to moove later */
-       data->filter = da_filter_malloc();
+       data->filter = da_flt_malloc();
        DB( g_print(" - filter ok %p\n", data->filter) );
 
 
        DB( g_print(" - filter ok %p\n", data->filter) );
 
 
This page took 0.063939 seconds and 4 git commands to generate.