]> Dogcows Code - chaz/homebank/blobdiff - src/ui-pref.c
revert whitespace fixes
[chaz/homebank] / src / ui-pref.c
index bcee6b1848e09e19df8a61921583935c0496a3a9..3ff2dd4877aa22562fa81f725eec83359212f11b 100644 (file)
@@ -1,5 +1,5 @@
 /*  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.
  *
@@ -21,7 +21,7 @@
 #include "homebank.h"
 
 #include "ui-pref.h"
-#include "dsp_mainwindow.h"
+#include "dsp-mainwindow.h"
 #include "gtk-chart-colors.h"
 
 #include "ext.h"
@@ -66,10 +66,13 @@ enum
 static gchar *pref_iconname[PREF_MAX] = {
 "prf-general",
 "prf-interface",
+"prf-locale",
 "prf-columns",
-"prf-display",
+//"prf-display", 
 "prf-import",
 "prf-report",
+"prf-backup",
+"prf-folder",
 "prf-euro",                    // to be renamed
 "prf-plugins",
 //"prf_charts.svg"
@@ -78,10 +81,12 @@ static gchar *pref_iconname[PREF_MAX] = {
 static gchar *pref_name[PREF_MAX]    = {
 N_("General"),
 N_("Interface"),
+N_("Locale"),
 N_("Transactions"),
-N_("Display format"),
 N_("Import/Export"),
 N_("Report"),
+N_("Backup"),
+N_("Folders"),
 N_("Euro minor"),
 N_("Plugins")
 //
@@ -124,6 +129,7 @@ gchar *CYA_IMPORT_OFXNAME[] = {
 N_("Ignore"),
 N_("Memo"),
 N_("Payee"),
+N_("Info"),
 NULL
 };
 
@@ -135,6 +141,15 @@ N_("Append to Payee"),
 NULL
 };
 
+gchar *CYA_IMPORT_CSVSEPARATOR[] = {
+N_("Tab"),
+N_("Comma"),
+N_("Semicolon"),
+N_("Space"),
+NULL
+};
+
+
 
 extern gchar *CYA_CHART_COLORSCHEME[];
 extern gchar *CYA_MONTHS[];
@@ -194,9 +209,9 @@ static void list_ext_colpref_get(GtkTreeView *treeview, GList **columns);
 
 static LangName languagenames[] =
 {
-// af ar ast be bg ca cs cy da de el en_AU en_CA en_GB es et eu fa fi fr ga gl he hr hu id is it
+// af ar ast be bg ca cs cy da de el en_AU en_CA en_GB es et eu fa fi fr ga gl he hr hu id is it 
 //ja ka ko lt lv ms nb nds nl oc pl pt_BR pt pt_PT ro ru si sk sl sr sv tr uk vi zh_CN zh_TW
-
+       
        { "aa", "Afar" },
        { "ab", "Abkhazian" },
        { "ae", "Avestan" },
@@ -404,7 +419,7 @@ gchar *name1, *name2;
        //keep system laguage on top
        if(code1 == NULL) name1 = NULL;
        if(code2 == NULL) name2 = NULL;
-
+       
     retval = hb_string_utf8_compare(name1, name2);
 
     g_free(name2);
@@ -453,7 +468,7 @@ const gchar *lang;
                        g_warning(" locale name not found '%s'", locale);
                        lang = locale;
                }
-
+               
        }
 
        return lang;
@@ -468,7 +483,7 @@ GtkTreeIter  iter;
 
        model = gtk_combo_box_get_model(GTK_COMBO_BOX(combobox));
        gtk_list_store_append (GTK_LIST_STORE(model), &iter);
-       gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+       gtk_list_store_set (GTK_LIST_STORE(model), &iter, 
                            0, NULL,
                            1, _("System Language"),
                            -1);
@@ -491,13 +506,13 @@ const gchar *dirname;
                {
                const gchar *lang;
                gchar *label;
-
+                       
                        gtk_list_store_append (GTK_LIST_STORE(model), &iter);
 
                        lang = ui_language_combobox_get_name(dirname);
                        label = g_strdup_printf ("%s [%s]", lang, dirname);
 
-                       gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+                       gtk_list_store_set (GTK_LIST_STORE(model), &iter, 
                                                    0, dirname,
                                                    1, label,
                                                    -1);
@@ -534,7 +549,7 @@ GtkCellRenderer *renderer;
        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 1, NULL);
 
        gtk_combo_box_set_id_column( GTK_COMBO_BOX(combobox), 0);
-
+               
        g_object_unref(store);
 
        if(label)
@@ -543,7 +558,7 @@ GtkCellRenderer *renderer;
        ui_language_combobox_populate(combobox);
 
        gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), 0);
-
+       
        return combobox;
 }
 
@@ -628,17 +643,17 @@ gboolean r;
 
        switch( type )
        {
-               case 1:
+               case PRF_PATH_WALLET:
                        path = &PREFS->path_hbfile;
                        entry = data->ST_path_hbfile;
                        title = _("Choose a default HomeBank files folder");
                        break;
-               case 2:
+               case PRF_PATH_IMPORT:
                        path = &PREFS->path_import;
                        entry = data->ST_path_import;
                        title = _("Choose a default import folder");
                        break;
-               case 3:
+               case PRF_PATH_EXPORT:
                        path = &PREFS->path_export;
                        entry = data->ST_path_export;
                        title = _("Choose a default export folder");
@@ -711,7 +726,7 @@ gchar buf[128];
        cur.frac_digits   = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_euro_fracdigits));
 
        da_cur_initformat (&cur);
-
+       
        DB( g_print("fmt: %s\n", cur.format) );
 
        g_ascii_formatd(formatd_buf, sizeof (formatd_buf), cur.format, HB_NUMBER_SAMPLE);
@@ -751,11 +766,11 @@ struct defpref_data *data;
 EuroParams *euro;
 gchar *buf;
 gint active;
-
+       
        DB( g_print("\n[ui-pref] eurosetcurrency\n") );
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
-
+       
        active = ui_euro_combobox_id_to_active(country);
        euro = &euro_params[active];
        buf = g_strdup_printf("%s - %s", euro->iso, euro->name);
@@ -804,8 +819,26 @@ gboolean sensitive;
 
        sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_custom_colors));
 
+       gtk_widget_set_sensitive(data->LB_colors         , sensitive);
+       gtk_widget_set_sensitive(data->CY_colors         , sensitive);
+       gtk_widget_set_sensitive(data->LB_exp_color      , sensitive);
        gtk_widget_set_sensitive(data->GR_colors         , sensitive);
+}
+
 
+static void defpref_backuptoggle(GtkWidget *widget, gpointer user_data)
+{
+struct defpref_data *data;
+gboolean sensitive;
+
+       DB( g_print("\n[ui-pref] backup toggle\n") );
+
+       data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
+
+       sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_bak_is_automatic));
+       gtk_widget_set_sensitive(data->LB_bak_max_num_copies, sensitive);
+       gtk_widget_set_sensitive(data->NB_bak_max_num_copies, sensitive);
+       gtk_widget_set_sensitive(data->GR_bak_freq          , sensitive);
 }
 
 
@@ -870,7 +903,7 @@ struct defpref_data *data;
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
 
        gtk_widget_queue_draw (data->DA_colors);
-
+       
 }
 
 
@@ -908,14 +941,14 @@ GdkRGBA rgba;
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_load_last), PREFS->loadlast);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_append_scheduled), PREFS->appendscheduled);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_do_update_currency), PREFS->do_update_currency);
-       gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_daterange_wal), PREFS->date_range_wal);
+       hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data->CY_daterange_wal), PREFS->date_range_wal);
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->NB_fiscyearday), PREFS->fisc_year_day );
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_fiscyearmonth), PREFS->fisc_year_month - 1);
 
        // files/backup
        gtk_entry_set_text(GTK_ENTRY(data->ST_path_hbfile), PREFS->path_hbfile);
-
-
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_bak_is_automatic), PREFS->bak_is_automatic);
+       gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->NB_bak_max_num_copies), PREFS->bak_max_num_copies);
 
        // interface
        if(PREFS->language != NULL)
@@ -936,11 +969,13 @@ GdkRGBA rgba;
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_gridlines), PREFS->grid_lines);
 
        // transactions
-       gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_daterange_txn), PREFS->date_range_txn);
+       hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data->CY_daterange_txn), PREFS->date_range_txn);
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_datefuture_nbdays), PREFS->date_future_nbdays);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_hide_reconciled), PREFS->hidereconciled);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_show_remind), PREFS->showremind);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_herit_date), PREFS->heritdate);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_memoacp), PREFS->txn_memoacp);
+       gtk_spin_button_set_value(GTK_SPIN_BUTTON(data->ST_memoacp_days), PREFS->txn_memoacp_days);
 
        // display format
        gtk_entry_set_text(GTK_ENTRY(data->ST_datefmt), PREFS->date_format);
@@ -949,15 +984,17 @@ GdkRGBA rgba;
 
        // import/export
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_dtex_datefmt), PREFS->dtex_datefmt);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_dtex_ucfirst), PREFS->dtex_ucfirst);
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_dtex_ofxname), PREFS->dtex_ofxname);
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_dtex_ofxmemo), PREFS->dtex_ofxmemo);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_dtex_qifmemo), PREFS->dtex_qifmemo);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_dtex_qifswap), PREFS->dtex_qifswap);
        gtk_entry_set_text(GTK_ENTRY(data->ST_path_import), PREFS->path_import);
        gtk_entry_set_text(GTK_ENTRY(data->ST_path_export), PREFS->path_export);
+       gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_dtex_csvsep), PREFS->dtex_csvsep);
 
        // report
-       gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_daterange_rep), PREFS->date_range_rep);
+       hbtk_combo_box_set_active_id(GTK_COMBO_BOX_TEXT(data->CY_daterange_rep), PREFS->date_range_rep);
        gtk_combo_box_set_active(GTK_COMBO_BOX(data->CY_color_scheme), PREFS->report_color_scheme);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_stat_byamount), PREFS->stat_byamount);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->CM_stat_showrate), PREFS->stat_showrate);
@@ -1005,15 +1042,15 @@ const gchar *lang;
        PREFS->loadlast  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_load_last));
        PREFS->appendscheduled  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_append_scheduled));
        PREFS->do_update_currency  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_do_update_currency));
-       PREFS->date_range_wal = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_daterange_wal));
+       PREFS->date_range_wal = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_daterange_wal));
        PREFS->fisc_year_day = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_fiscyearday));
        PREFS->fisc_year_month = 1 + gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_fiscyearmonth));
 
        // files/backup
-       g_free(PREFS->path_hbfile);
-       PREFS->path_hbfile = g_strdup(gtk_entry_get_text(GTK_ENTRY(data->ST_path_hbfile)));
-
+       ui_gtk_entry_replace_text(data->ST_path_hbfile, &PREFS->path_hbfile);
 
+       PREFS->bak_is_automatic  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_bak_is_automatic));
+       PREFS->bak_max_num_copies = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_bak_max_num_copies));
 
        g_free(PREFS->language);
        PREFS->language = NULL;
@@ -1022,7 +1059,7 @@ const gchar *lang;
        {
                PREFS->language = g_strdup(lang);
        }
-
+       
        PREFS->toolbar_style = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_toolbar));
        //PREFS->image_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_image_size));
 
@@ -1040,12 +1077,14 @@ const gchar *lang;
        PREFS->grid_lines = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_gridlines));
        //list_txn_colpref_get(GTK_TREE_VIEW(data->LV_opecolumns), PREFS->lst_ope_columns);
 
-       // transaction
-       PREFS->date_range_txn = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_daterange_txn));
+       // transaction 
+       PREFS->date_range_txn = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_daterange_txn));
        PREFS->date_future_nbdays  = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_datefuture_nbdays));
        PREFS->hidereconciled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_hide_reconciled));
        PREFS->showremind = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_show_remind));
        PREFS->heritdate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_herit_date));
+       PREFS->txn_memoacp = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_memoacp));
+       PREFS->txn_memoacp_days = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->ST_memoacp_days));
 
        // display format
        g_free(PREFS->date_format);
@@ -1055,15 +1094,17 @@ const gchar *lang;
 
        // import/export
        PREFS->dtex_datefmt = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_dtex_datefmt));
+       PREFS->dtex_ucfirst = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_dtex_ucfirst));
        PREFS->dtex_ofxname = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_dtex_ofxname));
        PREFS->dtex_ofxmemo = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_dtex_ofxmemo));
        PREFS->dtex_qifmemo = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_dtex_qifmemo));
        PREFS->dtex_qifswap = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_dtex_qifswap));
        ui_gtk_entry_replace_text(data->ST_path_import, &PREFS->path_import);
        ui_gtk_entry_replace_text(data->ST_path_export, &PREFS->path_export);
+       PREFS->dtex_csvsep = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_dtex_csvsep)); 
 
        // report
-       PREFS->date_range_rep = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_daterange_rep));
+       PREFS->date_range_rep = hbtk_combo_box_get_active_id(GTK_COMBO_BOX_TEXT(data->CY_daterange_rep));
        PREFS->report_color_scheme = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_color_scheme));
        PREFS->stat_byamount   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_stat_byamount));
        PREFS->stat_showrate   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_stat_showrate));
@@ -1090,7 +1131,7 @@ const gchar *lang;
 
 static GtkWidget *defpref_page_import (struct defpref_data *data)
 {
-GtkWidget *content_grid, *group_grid, *hbox, *label, *widget;
+GtkWidget *content_grid, *group_grid, *label, *widget;
 gint crow, row;
 
        content_grid = gtk_grid_new();
@@ -1103,10 +1144,10 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
-       label = make_label_group(_("Date options"));
+       
+       label = make_label_group(_("General options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
        label = make_label_widget(_("Date order:"));
        //----------------------------------------- l, r, t, b
@@ -1116,18 +1157,23 @@ gint crow, row;
        //gtk_grid_attach (GTK_GRID (group_grid), data->CY_option[FILTER_DATE], 1, 2, row, row+1);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
+       row++;
+       widget = gtk_check_button_new_with_mnemonic (_("Sentence _case memo/payee"));
+       data->CM_dtex_ucfirst = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+       
 
        // group :: OFX/QFX options
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("OFX/QFX options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
-       label = make_label_widget(_("_Name field:"));
+       label = make_label_widget(_("OFX _Name:"));
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_cycle(label, CYA_IMPORT_OFXNAME);
@@ -1136,7 +1182,7 @@ gint crow, row;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        row++;
-       label = make_label_widget(_("_Memo field:"));
+       label = make_label_widget(_("OFX _Memo:"));
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_cycle(label, CYA_IMPORT_OFXMEMO);
@@ -1149,67 +1195,38 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("QIF options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
-       label = make_label_widget(_("Memos:"));
-       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-       widget = gtk_check_button_new_with_mnemonic (_("_Import"));
+       widget = gtk_check_button_new_with_mnemonic (_("_Import memos"));
        data->CM_dtex_qifmemo = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
-       widget = gtk_check_button_new_with_mnemonic (_("_Swap with payees"));
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 1, 1);
+       widget = gtk_check_button_new_with_mnemonic (_("_Swap memos with payees"));
        data->CM_dtex_qifswap = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 3, row, 1, 1);
-
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
-       // group :: Files folder
+       // group :: other options
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
-       label = make_label_group(_("Files folder"));
+       
+       label = make_label_group(_("CSV options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
-       label = make_label_widget(_("_Import:"));
-       //----------------------------------------- l, r, t, b
-       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-
-       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-       gtk_widget_set_hexpand (hbox, TRUE);
-       gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
-
-       widget = make_string(label);
-       data->ST_path_import = widget;
-       gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(widget)), GTK_STYLE_CLASS_LINKED);
-       gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
-
-       //widget = gtk_button_new_with_label("...");
-       widget = gtk_button_new_from_icon_name(ICONNAME_FOLDER, GTK_ICON_SIZE_BUTTON);
-       data->BT_path_import = widget;
-       gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+       label = make_label(_("(transaction import only)"), 0.0, 0.5);
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 2, 1);
 
        row++;
-       label = make_label_widget(_("_Export:"));
+       label = make_label_widget(_("Separator:"));
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-
-       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-       gtk_widget_set_hexpand (hbox, TRUE);
-       gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
-
-       widget = make_string(label);
-       data->ST_path_export = widget;
-       gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(widget)), GTK_STYLE_CLASS_LINKED);
-       gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
-
-       //widget = gtk_button_new_with_label("...");
-       widget = gtk_button_new_from_icon_name(ICONNAME_FOLDER, GTK_ICON_SIZE_BUTTON);
-       data->BT_path_export = widget;
-       gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+       widget = make_cycle(label, CYA_IMPORT_CSVSEPARATOR);
+       data->CY_dtex_csvsep = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        return content_grid;
 }
@@ -1230,7 +1247,7 @@ gint i, x, y;
        index = gtk_combo_box_get_active(GTK_COMBO_BOX(data->CY_color_scheme));
 
        colorscheme_init(&scheme, index);
-
+       
        gtk_widget_get_size_request (widget, &w, &h);
        x = y = 0;
        for(i=0;i<scheme.nb_cols;i++)
@@ -1263,15 +1280,15 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Initial filter"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
-       label = make_label_widget(_("Date _range:"));
+       label = make_label_widget(_("_Range:"));
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-       widget = make_daterange(label, FALSE);
+       widget = make_daterange(label, DATE_RANGE_CUSTOM_HIDE);
        data->CY_daterange_rep = widget;
        //gtk_grid_attach (GTK_GRID (group_grid), data->CY_option[FILTER_DATE], 1, 2, row, row+1);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
@@ -1281,10 +1298,10 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Charts options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
        label = make_label_widget(_("Color scheme:"));
        //----------------------------------------- l, r, t, b
@@ -1307,10 +1324,10 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Statistics options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
        widget = gtk_check_button_new_with_mnemonic (_("Show by _amount"));
        data->CM_stat_byamount = widget;
@@ -1331,10 +1348,10 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Budget options"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
        widget = gtk_check_button_new_with_mnemonic (_("Show _details"));
        data->CM_budg_showdetail = widget;
@@ -1359,7 +1376,7 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("General"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
@@ -1374,7 +1391,7 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Currency"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 4, 1);
 
@@ -1394,7 +1411,7 @@ gint crow, row;
        //gtk_grid_attach (GTK_GRID (group_grid), data->CY_option[FILTER_DATE], 1, 2, row, row+1);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 3, row, 1, 1);
 
-
+       
        // group :: Exchange rate
     group_grid = gtk_grid_new ();
        data->GRP_rate = group_grid;
@@ -1419,7 +1436,7 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Format"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
@@ -1436,7 +1453,7 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_container_add (GTK_CONTAINER (expander), group_grid);
-
+       
        row = 0;
        label = make_label_widget(_("_Symbol:"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
@@ -1476,7 +1493,7 @@ gint crow, row;
 
 static GtkWidget *defpref_page_display (struct defpref_data *data)
 {
-GtkWidget *content_grid, *group_grid, *label, *widget, *expander;
+GtkWidget *content_grid, *group_grid, *label, *widget, *expander, *hbox;
 gint crow, row;
 
        content_grid = gtk_grid_new();
@@ -1484,30 +1501,40 @@ gint crow, row;
        gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
 
        crow = 0;
-       // group :: Date options
+       // group :: General
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
-       label = make_label_group(_("Date"));
+       
+       label = make_label_group(_("User interface"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
+       label = make_label(_("_Language:"), 0, 0.5);
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+       widget = ui_language_combobox_new(label);
+       data->CY_language = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
+
+       row++;
+       row++;
+       label = make_label(_("_Date display:"), 0, 0.5);
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_label(NULL, 0, 0.5);
        data->LB_date = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        row++;
        expander = gtk_expander_new_with_mnemonic(_("_Customize"));
-       gtk_grid_attach (GTK_GRID (group_grid), expander, 1, row, 1, 1);
+       gtk_grid_attach (GTK_GRID (group_grid), expander, 2, row, 1, 1);
 
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_container_add (GTK_CONTAINER (expander), group_grid);
 
-       row = 1;
+       row++;
        label = make_label_widget(_("_Format:"));
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
@@ -1519,7 +1546,7 @@ gint crow, row;
        widget = gtk_image_new_from_icon_name (ICONNAME_INFO, GTK_ICON_SIZE_BUTTON);
        gtk_grid_attach (GTK_GRID (group_grid), widget, 3, row, 1, 1);
 
-
+       
        gtk_widget_set_tooltip_text(widget,
        _("%a locale's abbreviated weekday name.\n"
 "%A locale's full weekday name. \n"
@@ -1534,7 +1561,7 @@ gint crow, row;
 "%m month as a decimal number [01,12]. \n"
 "%p locale's appropriate date representation. \n"
 "%y year without century as a decimal number [00,99]. \n"
-"%Y year with century as a decimal number. \n")
+"%Y year with century as a decimal number.")
 );
 
        row++;
@@ -1542,12 +1569,40 @@ gint crow, row;
        gtk_label_set_markup (GTK_LABEL(widget), "<small><a href=\"http://man7.org/linux/man-pages/man3/strftime.3.html\">online reference</a></small>");
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
-       // group :: Measurement units
+
+
+
+       // group :: Fiscal year
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
 
+       label = make_label_group(_("Fiscal year"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
+
+       row = 1;
+       //TRANSLATORS: (fiscal year) starts on
+       label = make_label_widget(_("Starts _on:"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
+       gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
+       widget = make_numeric (label, 1, 28);
+       data->NB_fiscyearday = widget;
+       gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+       widget = make_cycle (NULL, CYA_MONTHS);
+       data->CY_fiscyearmonth = widget;
+       gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+
+
+
+       // group :: Measurement units
+    group_grid = gtk_grid_new ();
+       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
+       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+       
        label = make_label_group(_("Measurement units"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
@@ -1580,47 +1635,47 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Transaction window"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
-       label = make_label_widget(_("Date _range:"));
+       label = make_label(_("_Range:"), 0, 0.5);
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-       widget = make_daterange(label, FALSE);
+       widget = make_daterange(label, DATE_RANGE_CUSTOM_HIDE);
        data->CY_daterange_txn = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        row++;
-       label = make_label_widget(_("_Show:"));
+       label = make_label(_("_Show future:"), 0, 0.5);
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_numeric(NULL, 0, 366);
-
+       
        data->ST_datefuture_nbdays = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        //TRANSLATORS: there is a spinner on the left of this label, and so you have 0....x days in advance the current date
-       label = make_label(_("days in advance the current date"), 0, 0.5);
+       label = make_label(_("days ahead"), 0, 0.5);
        gtk_grid_attach (GTK_GRID (group_grid), label, 3, row, 1, 1);
 
        row++;
        widget = gtk_check_button_new_with_mnemonic (_("Hide reconciled transactions"));
        data->CM_hide_reconciled = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1);
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 3, 1);
 
        row++;
        widget = gtk_check_button_new_with_mnemonic (_("Always show remind transactions"));
        data->CM_show_remind = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 2, 1);
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 3, 1);
 
        // group :: Multiple add
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Multiple add"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
@@ -1629,13 +1684,34 @@ gint crow, row;
        data->CM_herit_date = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
 
+       // group :: Memo autocomplete
+    group_grid = gtk_grid_new ();
+       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
+       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+       
+       label = make_label_group(_("Memo autocomplete"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
+
+       row = 1;
+       widget = gtk_check_button_new_with_mnemonic (_("Active"));
+       data->CM_memoacp = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+
+       row++;
+       widget = make_numeric(NULL, 0, 1460);
+       data->ST_memoacp_days = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
+       label = make_label(_("rolling days"), 0, 0.5);
+       gtk_grid_attach (GTK_GRID (group_grid), label, 3, row, 1, 1);
+
        // group :: Column list
        /*
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Column list"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
@@ -1672,29 +1748,28 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("General"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
-       label = make_label_widget(_("_Language:"));
-       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-       widget = ui_language_combobox_new(label);
-       data->CY_language = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
-
-       row++;
-       label = make_label_widget(_("_Toolbar:"));
+       label = make_label(_("_Toolbar:"), 0, 0.5);
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_cycle(label, CYA_TOOLBAR_STYLE);
        data->CY_toolbar = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
 
+
+
+
+
+
+
        row++;
        //widget = gtk_check_button_new_with_mnemonic (_("Enable rows in alternating colors"));
        //data->CM_ruleshint = widget;
-       label = make_label_widget(_("_Grid line:"));
+       label = make_label(_("_Grid line:"), 0, 0.5);
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_cycle(label, CYA_GRID_LINES);
        data->CY_gridlines = widget;
@@ -1705,23 +1780,18 @@ gint crow, row;
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
+       
        label = make_label_group(_("Amount colors"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
        widget = gtk_check_button_new_with_mnemonic (_("Uses custom colors"));
        data->CM_custom_colors = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
-
-    group_grid = gtk_grid_new ();
-       data->GR_colors = group_grid;
-       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
-       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
-       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
 
        row++;
-       label = make_label_widget(_("_Preset:"));
+       label = make_label(_("_Preset:"), 0, 0.5);
+       data->LB_colors = label;
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        widget = make_cycle(label, CYA_TANGO_COLORS);
@@ -1730,16 +1800,18 @@ gint crow, row;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        row++;
-       label = make_label_widget(_("_Expense:"));
+       label = make_label(_("_Expense:"), 0, 0.5);
+       data->LB_exp_color = label;
        //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
        hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
+       data->GR_colors = hbox;
        gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
-
+       
        widget = gtk_color_button_new ();
        data->CP_exp_color = widget;
        gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
-
+       
        label = make_label_widget(_("_Income:"));
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
 
@@ -1758,7 +1830,7 @@ gint crow, row;
 }
 
 
-static GtkWidget *defpref_page_general (struct defpref_data *data)
+static GtkWidget *defpref_page_filebackup (struct defpref_data *data)
 {
 GtkWidget *content_grid, *group_grid, *hbox, *label, *widget;
 gint crow, row;
@@ -1768,85 +1840,113 @@ gint crow, row;
        gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
 
        crow = 0;
-       // group :: Program start
+       // group :: Backup
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
-       label = make_label_group(_("Program start"));
+       
+       label = make_label_group(_("Backup"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
-       widget = gtk_check_button_new_with_mnemonic (_("Show splash screen"));
-       data->CM_show_splash = widget;
+       widget = gtk_check_button_new_with_mnemonic (_("_Enable automatic backups"));
+       data->CM_bak_is_automatic = widget;
        gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
 
        row++;
-       widget = gtk_check_button_new_with_mnemonic (_("Load last opened file"));
-       data->CM_load_last = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+       label = make_label_widget(_("_Number of backups to keep:"));
+       data->LB_bak_max_num_copies = label;
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+       widget = make_numeric (label, 1, 99);
+       data->NB_bak_max_num_copies = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
        row++;
-       widget = gtk_check_button_new_with_mnemonic (_("Post pending scheduled transactions"));
-       data->CM_append_scheduled = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
+       data->GR_bak_freq = hbox;
+       //gtk_widget_set_hexpand (hbox, TRUE);
+       gtk_grid_attach (GTK_GRID (group_grid), hbox, 1, row, 2, 1);
 
-       row++;
-       widget = gtk_check_button_new_with_mnemonic (_("Update currencies online"));
-       data->CM_do_update_currency = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+               widget = gtk_image_new_from_icon_name (ICONNAME_INFO, GTK_ICON_SIZE_BUTTON);
+               gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+               label = make_label_widget(_("Backup frequency is once a day"));
+               gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
 
-       // group :: Fiscal year
+
+       return content_grid;
+}
+
+
+static GtkWidget *defpref_page_folders (struct defpref_data *data)
+{
+GtkWidget *content_grid, *group_grid, *hbox, *label, *widget;
+gint crow, row;
+
+       content_grid = gtk_grid_new();
+       gtk_grid_set_row_spacing (GTK_GRID (content_grid), SPACING_LARGE);
+       gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
+
+       crow = 0;
+       // group :: Files folder
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
-       label = make_label_group(_("Fiscal year"));
+       
+       label = make_label_group(_("HomeBank files"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
 
        row = 1;
-       //TRANSLATORS: (fiscal year) starts on
-       label = make_label_widget(_("Starts _on:"));
+       label = make_label_widget(_("_Wallets:"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
 
-       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, SPACING_SMALL);
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+       gtk_widget_set_hexpand (hbox, TRUE);
        gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
-       widget = make_numeric (label, 1, 28);
-       data->NB_fiscyearday = widget;
-       gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
-       widget = make_cycle (NULL, CYA_MONTHS);
-       data->CY_fiscyearmonth = widget;
+
+       widget = make_string(label);
+       data->ST_path_hbfile = widget;
+       gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(widget)), GTK_STYLE_CLASS_LINKED);
+       gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
+
+       //widget = gtk_button_new_with_label("...");
+       widget = gtk_button_new_from_icon_name(ICONNAME_FOLDER, GTK_ICON_SIZE_BUTTON);
+       data->BT_path_hbfile = widget;
        gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
 
-       // group :: Main window reports
+
+       // group :: Files folder
     group_grid = gtk_grid_new ();
        gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
        gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
        gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
-
-       label = make_label_group(_("Main window reports"));
+       
+       label = make_label_group(_("Exchange files"));
        gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+       
        row = 1;
-       label = make_label_widget(_("Date _range:"));
+       label = make_label_widget(_("_Import:"));
+       //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
-       widget = make_daterange(label, FALSE);
-       data->CY_daterange_wal = widget;
-       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
 
-       // group :: Files folder
-    group_grid = gtk_grid_new ();
-       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
-       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
-       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+       hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+       gtk_widget_set_hexpand (hbox, TRUE);
+       gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
 
-       label = make_label_group(_("Files folder"));
-       gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
+       widget = make_string(label);
+       data->ST_path_import = widget;
+       gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(widget)), GTK_STYLE_CLASS_LINKED);
+       gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
 
-       row = 1;
-       label = make_label_widget(_("_Default:"));
+       //widget = gtk_button_new_with_label("...");
+       widget = gtk_button_new_from_icon_name(ICONNAME_FOLDER, GTK_ICON_SIZE_BUTTON);
+       data->BT_path_import = widget;
+       gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+
+       row++;
+       label = make_label_widget(_("_Export:"));
+       //----------------------------------------- l, r, t, b
        gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
 
        hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
@@ -1854,15 +1954,77 @@ gint crow, row;
        gtk_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
 
        widget = make_string(label);
-       data->ST_path_hbfile = widget;
+       data->ST_path_export = widget;
        gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET(widget)), GTK_STYLE_CLASS_LINKED);
        gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
 
        //widget = gtk_button_new_with_label("...");
        widget = gtk_button_new_from_icon_name(ICONNAME_FOLDER, GTK_ICON_SIZE_BUTTON);
-       data->BT_path_hbfile = widget;
+       data->BT_path_export = widget;
        gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
 
+
+
+       return content_grid;
+}
+
+
+static GtkWidget *defpref_page_general (struct defpref_data *data)
+{
+GtkWidget *content_grid, *group_grid, *label, *widget;
+gint crow, row;
+
+       content_grid = gtk_grid_new();
+       gtk_grid_set_row_spacing (GTK_GRID (content_grid), SPACING_LARGE);
+       gtk_orientable_set_orientation(GTK_ORIENTABLE(content_grid), GTK_ORIENTATION_VERTICAL);
+
+       crow = 0;
+       // group :: Program start
+    group_grid = gtk_grid_new ();
+       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
+       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+       
+       label = make_label_group(_("Program start"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
+
+       row = 1;
+       widget = gtk_check_button_new_with_mnemonic (_("Show splash screen"));
+       data->CM_show_splash = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+
+       row++;
+       widget = gtk_check_button_new_with_mnemonic (_("Load last opened file"));
+       data->CM_load_last = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+
+       row++;
+       widget = gtk_check_button_new_with_mnemonic (_("Post pending scheduled transactions"));
+       data->CM_append_scheduled = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+
+       row++;
+       widget = gtk_check_button_new_with_mnemonic (_("Update currencies online"));
+       data->CM_do_update_currency = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 1, row, 2, 1);
+
+
+       // group :: Main window reports
+    group_grid = gtk_grid_new ();
+       gtk_grid_set_row_spacing (GTK_GRID (group_grid), SPACING_SMALL);
+       gtk_grid_set_column_spacing (GTK_GRID (group_grid), SPACING_MEDIUM);
+       gtk_grid_attach (GTK_GRID (content_grid), group_grid, 0, crow++, 1, 1);
+       
+       label = make_label_group(_("Main window reports"));
+       gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
+
+       row = 1;
+       label = make_label(_("_Range:"), 0, 0.5);
+       gtk_grid_attach (GTK_GRID (group_grid), label, 1, row, 1, 1);
+       widget = make_daterange(label, DATE_RANGE_CUSTOM_HIDE);
+       data->CY_daterange_wal = widget;
+       gtk_grid_attach (GTK_GRID (group_grid), widget, 2, row, 1, 1);
+
        return content_grid;
 }
 
@@ -2137,26 +2299,26 @@ GtkTreeModel *model;
 /*
 ** add an empty new account to our temp GList and treeview
 */
-static void defpref_clear(GtkWidget *widget, gpointer user_data)
+static void defpref_reset(GtkWidget *widget, gpointer user_data)
 {
 struct defpref_data *data;
 gint result;
 
        data = g_object_get_data(G_OBJECT(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), "inst_data");
-       DB( g_print("\n(defpref_clear) (data=%p)\n", data) );
+       DB( g_print("\n(defpref_reset) (data=%p)\n", data) );
 
        result = ui_dialog_msg_confirm_alert(
                GTK_WINDOW(data->window),
-               _("Reset all preferences"),
-               _("Do you really want to reset all\npreferences to default values?"),
-           _("Reset")
+               _("Reset All Preferences"),
+               _("Do you really want to reset\nall preferences to default\nvalues?"),
+           _("_Reset")
                );
        if( result == GTK_RESPONSE_OK )
        {
                homebank_pref_setdefault();
                defpref_set(data);
        }
-
+       
 }
 
 
@@ -2170,6 +2332,8 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
       window = gtk_dialog_new_with_buttons (_("Preferences"),
                                GTK_WINDOW(GLOBALS->mainwindow),
                                0,
+                               _("_Reset"),
+                               55,
                                _("_Cancel"),
                                GTK_RESPONSE_REJECT,
                                _("_OK"),
@@ -2177,7 +2341,7 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
                                NULL);
 
        data.window = window;
-
+       
        //store our window private data
        g_object_set_data(G_OBJECT(window), "inst_data", (gpointer)&data);
 
@@ -2195,7 +2359,7 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        //left part
        vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, SPACING_SMALL);
        gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
-
+       
        //list
        sw = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN);
@@ -2205,10 +2369,6 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        data.LV_page = widget;
        gtk_container_add (GTK_CONTAINER (sw), widget);
 
-       // clear button
-       data.BT_clear = gtk_button_new_with_mnemonic(_("_Reset"));
-       gtk_box_pack_start (GTK_BOX (vbox), data.BT_clear, FALSE, TRUE, 0);
-
 
        //right part : notebook
        vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, SPACING_MEDIUM);
@@ -2224,11 +2384,11 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        #else
        GtkCssProvider *provider;
                provider = gtk_css_provider_new ();
-               gtk_css_provider_load_from_data (provider,
+               gtk_css_provider_load_from_data (provider, 
                "#hbebox { color: @theme_selected_fg_color; background-color: @theme_selected_bg_color; }"
                , -1, NULL);
                gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER(provider), G_MAXUINT);
-
+       
        //      gtk_style_context_set_state(context, GTK_STATE_FLAG_SELECTED);
        #endif
 
@@ -2267,12 +2427,16 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
     gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);
 
 /*
-"general",
-"interface",
-"display",
-"help",
-"euro",
-"report"
+       PREF_GENERAL,
+       PREF_INTERFACE,
+       PREF_LOCALE,    //old DISPLAY
+       PREF_TXN,               //old COLUMNS
+       PREF_IMPORT,
+       PREF_REPORT,
+       PREF_BACKUP,
+       PREF_FOLDERS,
+       PREF_EURO,
+       PREF_MAX
 */
 
        //general
@@ -2283,12 +2447,12 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        page = defpref_page_interface(&data);
        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
 
-       //columns
-       page = defpref_page_transactions(&data);
+       //locale
+       page = defpref_page_display(&data);
        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
 
-       //display
-       page = defpref_page_display(&data);
+       //transaction
+       page = defpref_page_transactions(&data);
        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
 
        //import
@@ -2299,6 +2463,14 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        page = defpref_page_reports(&data);
        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
 
+       //backup
+       page = defpref_page_filebackup(&data);
+       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
+
+       //folders
+       page = defpref_page_folders(&data);
+       gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
+
        //euro
        page = defpref_page_euro(&data);
        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
@@ -2314,18 +2486,19 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        //connect all our signals
        g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
 
-       g_signal_connect (G_OBJECT (data.BT_clear), "clicked", G_CALLBACK (defpref_clear), NULL);
+       g_signal_connect (data.CM_bak_is_automatic, "toggled", G_CALLBACK (defpref_backuptoggle), NULL);
 
+       
        //path selector
-       g_signal_connect (data.BT_path_hbfile, "pressed", G_CALLBACK (defpref_pathselect), GINT_TO_POINTER(1));
-       g_signal_connect (data.BT_path_import, "pressed", G_CALLBACK (defpref_pathselect), GINT_TO_POINTER(2));
-       g_signal_connect (data.BT_path_export, "pressed", G_CALLBACK (defpref_pathselect), GINT_TO_POINTER(3));
+       g_signal_connect (data.BT_path_hbfile, "pressed", G_CALLBACK (defpref_pathselect), GINT_TO_POINTER(PRF_PATH_WALLET));
+       g_signal_connect (data.BT_path_import, "pressed", G_CALLBACK (defpref_pathselect), GINT_TO_POINTER(PRF_PATH_IMPORT));
+       g_signal_connect (data.BT_path_export, "pressed", G_CALLBACK (defpref_pathselect), GINT_TO_POINTER(PRF_PATH_EXPORT));
 
        g_signal_connect (data.CM_custom_colors, "toggled", G_CALLBACK (defpref_colortoggle), NULL);
     g_signal_connect (data.CY_colors, "changed", G_CALLBACK (defpref_colorpreset), NULL);
 
 
-
+       
        g_signal_connect (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_page)), "changed", G_CALLBACK (defpref_selection), notebook);
 
        g_signal_connect (data.CM_euro_enable, "toggled", G_CALLBACK (defpref_eurotoggle), NULL);
@@ -2361,10 +2534,9 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
        gtk_window_resize(GTK_WINDOW(window), 640, 256);
 
 
-       //select first row
+       //select initial row
        GtkTreePath *path = gtk_tree_path_new_from_indices(initial_selection, -1);
 
-
        gtk_tree_selection_select_path (gtk_tree_view_get_selection(GTK_TREE_VIEW(data.LV_page)), path);
 
 
@@ -2390,20 +2562,24 @@ GtkWidget *hbox, *vbox, *sw, *widget, *notebook, *page, *ebox, *image, *label;
                                ui_mainwindow_update(GLOBALS->mainwindow, GINT_TO_POINTER(UF_BALANCE+UF_VISUAL));
 
                                DB( g_print("old='%s' new='%s'\n", old_lang, PREFS->language) );
-
+                               
                                if(g_ascii_strncasecmp(old_lang == NULL ? "" : old_lang, PREFS->language == NULL ? "" : PREFS->language, -1) != 0)
                                {
                                        ui_dialog_msg_infoerror(GTK_WINDOW(window), GTK_MESSAGE_INFO,
                                                _("Info"),
                                                _("You will have to restart HomeBank\nfor the language change to take effect.")
                                        );
-
+                       
                                }
 
                                g_free(old_lang);
                                break;
-               }
 
+                       case 55:
+                               defpref_reset (window, NULL);
+                               break;
+               }
+       
 
        // cleanup and destroy
        //defhbfile_cleanup(&data, result);
@@ -2484,7 +2660,7 @@ GtkTreeIter  iter;
 GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
 gboolean fixed;
 
-       // get toggled iter
+       // get toggled iter 
        gtk_tree_model_get_iter (model, &iter, path);
        gtk_tree_model_get (model, &iter, COLUMN_VISIBLE, &fixed, -1);
 
@@ -2508,7 +2684,7 @@ gboolean visible;
 gint i, id;
 
        DB( g_print("[lst_txn-colpref] store column order \n") );
-
+       
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
        i = 0;
@@ -2557,16 +2733,16 @@ gint i;
        gboolean visible;
 
                DB( g_print("eval %d, %s\n", i, list_txn_column_label[i]) );
-
+               
                if(i <= LST_DSPOPE_DATE) // status, date always displayed
                        continue;
 
-               //[i-1] here because lst_ope_columns[] do not store LST_DSPOPE_DATAS
-               id = ABS(PREFS->lst_ope_columns[i-1]);
+               //[i-1] here because lst_ope_columns[] do not store MODEL_TXN_POINTER
+               id = ABS(PREFS->lst_ope_columns[i-1]);  
                if(id == 0) id = i;      //if we pass here, new column or weird into pref file
                visible = (PREFS->lst_ope_columns[i-1] > 0) ? TRUE : FALSE;
 
-
+               
                DB( g_print(" - pos=%2d, id=%2d - %d '%s'\n", i, id, visible, list_txn_column_label[id]) );
 
                gtk_list_store_append (store, &iter);
@@ -2575,7 +2751,7 @@ gint i;
                        COLUMN_NAME, _(list_txn_column_label[id]),
                        COLUMN_ID  , id,
                        -1);
-
+               
        }
 
        //treeview
@@ -2594,7 +2770,7 @@ gint i;
        g_signal_connect (renderer, "toggled",
                            G_CALLBACK (list_txn_colpref_toggled_cell_data_function), store);
 
-
+       
        renderer = gtk_cell_renderer_text_new ();
        column = gtk_tree_view_column_new_with_attributes (_("Column"),
                                                             renderer,
This page took 0.063443 seconds and 4 git commands to generate.