/* HomeBank -- Free, easy, personal accounting for everyone.
- * Copyright (C) 1995-2014 Maxime DOYEN
+ * Copyright (C) 1995-2019 Maxime DOYEN
*
* This file is part of HomeBank.
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include "homebank.h"
+
#include "hb-preferences.h"
#include "hb-filter.h"
#include "gtk-chart-colors.h"
extern struct HomeBank *GLOBALS;
extern struct Preferences *PREFS;
+/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
+static void homebank_pref_init_monetary(void)
+{
+
+ DB( g_print("\n[system] get currency code\n") );
+
+#ifdef G_OS_UNIX
+ struct lconv *lc = localeconv();
+
+ g_stpcpy (PREFS->IntCurrSymbol, lc->int_curr_symbol);
+ g_strstrip(PREFS->IntCurrSymbol);
+
+ DB( g_print("- stored '%s' from linux system\n", PREFS->IntCurrSymbol) );
+#else
+
+ #ifdef G_OS_WIN32
+ #define BUFFER_SIZE 512
+ char buffer[BUFFER_SIZE];
+ //LPWSTR wcBuffer = buffer;
+ LPSTR wcBuffer = buffer;
+ int iResult;
+
+ //https://msdn.microsoft.com/en-us/library/windows/desktop/dd464799%28v=vs.85%29.aspx
+
+ //LOCALE_SINTLSYMBOL
+ iResult = GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SINTLSYMBOL, wcBuffer, BUFFER_SIZE);
+ if(iResult > 0)
+ {
+ DB( g_print("LOCALE_SINTLSYMBOL='%s'\n", buffer) );
+ g_stpcpy (PREFS->IntCurrSymbol, buffer);
+ g_strstrip(PREFS->IntCurrSymbol);
+
+ DB( g_print("- stored '%s' from windows system\n", PREFS->IntCurrSymbol) );
+ }
+ #else
+
+ g_stpcpy (PREFS->IntCurrSymbol, "USD");
+
+ DB( g_print("- stored '%s' as default\n", PREFS->IntCurrSymbol) );
+
+ #endif
+
+#endif
+
+
+}
+
+
+/*
static void homebank_pref_init_monetary(void)
{
DB( g_print("\n[preferences] monetary\n") );
DB( g_print("\n[preferences] monetary unix\n") );
+ DB( g_print("int_curr_symbol '%s'\n", lc->int_curr_symbol) );
+
DB( g_print("mon_decimal_point is utf8: %d\n", g_utf8_validate(lc->mon_decimal_point, -1, NULL)) );
DB( g_print("mon_decimal_point '%s'\n", lc->mon_decimal_point) );
DB( g_print("mon_decimal_point %x %x %x %x\n", lc->mon_decimal_point[0], lc->mon_decimal_point[1], lc->mon_decimal_point[2], lc->mon_decimal_point[3]) );
DB( g_print("n_cs_precedes '%d'\n", lc->n_cs_precedes) );
- /* ok assign */
-
+ //PREFS->base_cur.iso_code = g_strdup(g_strstrip(lc->int_curr_symbol));
if( lc->p_cs_precedes || lc->n_cs_precedes )
{
PREFS->base_cur.symbol = g_strdup(lc->currency_symbol);
- PREFS->base_cur.is_prefix = TRUE;
+ PREFS->base_cur.sym_prefix = TRUE;
DB( g_print("locale mon cs is a prefix\n") );
}
else
{
PREFS->base_cur.symbol = g_strdup(lc->currency_symbol);
- PREFS->base_cur.is_prefix = FALSE;
+ PREFS->base_cur.sym_prefix = FALSE;
}
PREFS->base_cur.decimal_char = g_strdup(lc->mon_decimal_point);
#else
#ifdef G_OS_WIN32
- //todo: to be really set by a win32 specialist from the registry...
+
#define BUFFER_SIZE 512
char buffer[BUFFER_SIZE];
//LPWSTR wcBuffer = buffer;
int iResult;
gsize toto;
+ //https://msdn.microsoft.com/en-us/library/windows/desktop/dd464799%28v=vs.85%29.aspx
+
+ //LOCALE_SINTLSYMBOL
+
+
//see g_locale_to_utf8 here
iResult = GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SCURRENCY, wcBuffer, BUFFER_SIZE);
if(iResult > 0)
PREFS->base_cur.symbol = g_locale_to_utf8(buffer, -1, NULL, &toto, NULL);
}
+ // LOCALE_ICURRENCY
+ //PREFS->base_cur.sym_prefix =
+
iResult = GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, wcBuffer, BUFFER_SIZE);
if(iResult > 0)
{
PREFS->base_cur.grouping_char = g_locale_to_utf8(buffer, -1, NULL, &toto, NULL);
}
+ // LOCALE_ICURRDIGITS
PREFS->base_cur.frac_digits = 2;
#else
- PREFS->base_cur.prefix_symbol = NULL; //g_strdup("");
- PREFS->base_cur.suffix_symbol = NULL; //g_strdup("");
+ PREFS->base_cur.iso_code = g_strdup("USD");
+ PREFS->base_cur.symbol = NULL; //g_strdup("");
+ PREFS->base_cur.sym_prefix = FALSE;
PREFS->base_cur.decimal_char = g_strdup(".");
PREFS->base_cur.grouping_char = NULL; //g_strdup("");
PREFS->base_cur.frac_digits = 2;
#endif
}
+*/
}
-/*
-** create the format string for monetary strfmon (major/minor)
-*/
-static void _homebank_pref_createformat(void)
-{
-struct CurrencyFmt *cur;
-
- DB( g_print("\n[preferences] pref create format\n") );
-
-/*
- if(PREFS->base_cur.grouping_char != NULL)
- g_snprintf(GLOBALS->fmt_maj_number, 15, "%%^.%dn", PREFS->base_cur.frac_digits);
- else
- g_snprintf(GLOBALS->fmt_maj_number, 15, "%%.%dn", PREFS->base_cur.frac_digits);
-
- DB( g_print("+ major is: '%s'\n", GLOBALS->fmt_maj_number) );
-
-
- if(PREFS->minor_cur.grouping_char != NULL)
- g_snprintf(GLOBALS->fmt_min_number, 15, "%s %%!^.%dn %s",
- PREFS->minor_cur.prefix_symbol,
- PREFS->minor_cur.frac_digits,
- PREFS->minor_cur.suffix_symbol
- );
- else
- g_snprintf(GLOBALS->fmt_min_number, 15, "%s %%!.%dn %s",
- PREFS->minor_cur.prefix_symbol,
- PREFS->minor_cur.frac_digits,
- PREFS->minor_cur.suffix_symbol
- );
-
- DB( g_print("+ minor is: '%s'\n", GLOBALS->fmt_min_number) );
-*/
-
- /* base mon format */
- cur = &PREFS->base_cur;
- g_snprintf(cur->format , 8-1, "%%.%df", cur->frac_digits);
- g_snprintf(cur->monfmt, 32-1, (cur->is_prefix) ? "%s %%s" : "%%s %s", cur->symbol);
- DB( g_print(" - format: '%s'\n", cur->format) );
- DB( g_print(" - monfmt: '%s'\n", cur->monfmt) );
-
- /* minor mon format */
- cur = &PREFS->minor_cur;
- g_snprintf(cur->format , 8-1, "%%.%df", cur->frac_digits);
- g_snprintf(cur->monfmt, 32-1, (cur->is_prefix) ? "%s %%s" : "%%s %s", cur->symbol);
- DB( g_print(" - format: '%s'\n", cur->format) );
- DB( g_print(" - monfmt: '%s'\n", cur->monfmt) );
-
-}
-
-
//vehicle_unit_100
//vehicle_unit_distbyvol
//=> used for column title
// unit is miles
else
{
- PREFS->vehicle_unit_dist = "%d m.";
- PREFS->vehicle_unit_100 = "100 miles";
+ PREFS->vehicle_unit_dist = "%d mi.";
+ PREFS->vehicle_unit_100 = "100 mi.";
}
// unit is Liters
if(!PREFS->vehicle_unit_isgal)
{
- PREFS->vehicle_unit_vol = "%.2f L";
+ //TRANSLATORS: format a liter number with l/L as abbreviation
+ PREFS->vehicle_unit_vol = _("%.2f l");
if(!PREFS->vehicle_unit_ismile)
- PREFS->vehicle_unit_distbyvol = "km/L";
+ //TRANSLATORS: kilometer per liter
+ PREFS->vehicle_unit_distbyvol = _("km/l");
else
- PREFS->vehicle_unit_distbyvol = "miles/gal";
+ //TRANSLATORS: miles per liter
+ PREFS->vehicle_unit_distbyvol = _("mi./l");
}
// unit is gallon
else
{
- PREFS->vehicle_unit_vol = "%.2f gal";
+ PREFS->vehicle_unit_vol = "%.2f gal.";
if(!PREFS->vehicle_unit_ismile)
- PREFS->vehicle_unit_distbyvol = "km/gal";
+ PREFS->vehicle_unit_distbyvol = "km/gal.";
else
- PREFS->vehicle_unit_distbyvol = "miles/gal";
+ PREFS->vehicle_unit_distbyvol = "mi./gal.";
}
}
g_free(PREFS->language);
- g_free(PREFS->base_cur.symbol);
- g_free(PREFS->base_cur.decimal_char);
- g_free(PREFS->base_cur.grouping_char);
+ g_free(PREFS->pnl_list_tab);
g_free(PREFS->minor_cur.symbol);
g_free(PREFS->minor_cur.decimal_char);
PREFS->showsplash = TRUE;
PREFS->loadlast = TRUE;
PREFS->appendscheduled = FALSE;
+ PREFS->do_update_currency = FALSE;
+
+ PREFS->bak_is_automatic = TRUE;
+ PREFS->bak_max_num_copies = 5;
PREFS->heritdate = FALSE;
PREFS->hidereconciled = FALSE;
+ PREFS->showremind = TRUE;
+ //#1673048
+ PREFS->txn_memoacp = TRUE;
+ PREFS->txn_memoacp_days = 365;
PREFS->toolbar_style = 4; //text beside icons
PREFS->custom_colors = TRUE;
PREFS->color_exp = g_strdup(DEFAULT_EXP_COLOR);
PREFS->color_inc = g_strdup(DEFAULT_INC_COLOR);
PREFS->color_warn = g_strdup(DEFAULT_WARN_COLOR);
- PREFS->rules_hint = FALSE;
+ PREFS->grid_lines = GTK_TREE_VIEW_GRID_LINES_NONE;
/* fiscal year */
PREFS->fisc_year_day = 1;
homebank_pref_init_wingeometry(&PREFS->bud_wg, 0, 0, 800, 494);
homebank_pref_init_wingeometry(&PREFS->cst_wg, 0, 0, 800, 494);
+ homebank_pref_init_wingeometry(&PREFS->txn_wg, 0, 0, -1, -1);
+
homebank_pref_init_monetary();
PREFS->wal_toolbar = TRUE;
PREFS->wal_vpaned = 600/2;
PREFS->wal_hpaned = 1024/2;
+ PREFS->pnl_acc_col_acc_width = -1;
+ PREFS->pnl_acc_show_by = 0;
+ PREFS->pnl_upc_col_pay_width = -1;
+ PREFS->pnl_upc_col_mem_width = -1;
+ i = 0;
+ PREFS->lst_impope_columns[i++] = LST_DSPOPE_DATE; //always displayed
+ PREFS->lst_impope_columns[i++] = LST_DSPOPE_MEMO;
+ PREFS->lst_impope_columns[i++] = LST_DSPOPE_AMOUNT;
+ PREFS->lst_impope_columns[i++] = LST_DSPOPE_INFO;
+ PREFS->lst_impope_columns[i++] = LST_DSPOPE_PAYEE;
+ PREFS->lst_impope_columns[i++] = LST_DSPOPE_CATEGORY;
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_TAGS;
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_CLR;
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_STATUS; //always displayed
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_EXPENSE;
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_INCOME;
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_BALANCE;
+ PREFS->lst_impope_columns[i++] = -LST_DSPOPE_ACCOUNT;
i = 0;
- /* prior v4.5
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_STATUS;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_DATE;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_INFO;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_PAYEE;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_WORDING;
- PREFS->lst_ope_columns[i++] = -LST_DSPOPE_AMOUNT;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_EXPENSE;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_INCOME;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_CATEGORY;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_TAGS;
- */
PREFS->lst_ope_columns[i++] = LST_DSPOPE_STATUS; //always displayed
PREFS->lst_ope_columns[i++] = LST_DSPOPE_DATE; //always displayed
PREFS->lst_ope_columns[i++] = LST_DSPOPE_INFO;
PREFS->lst_ope_columns[i++] = LST_DSPOPE_PAYEE;
PREFS->lst_ope_columns[i++] = LST_DSPOPE_CATEGORY;
PREFS->lst_ope_columns[i++] = LST_DSPOPE_TAGS;
+ PREFS->lst_ope_columns[i++] = LST_DSPOPE_CLR;
PREFS->lst_ope_columns[i++] = -LST_DSPOPE_AMOUNT;
PREFS->lst_ope_columns[i++] = LST_DSPOPE_EXPENSE;
PREFS->lst_ope_columns[i++] = LST_DSPOPE_INCOME;
PREFS->lst_ope_columns[i++] = LST_DSPOPE_BALANCE;
- PREFS->lst_ope_columns[i++] = LST_DSPOPE_WORDING;
+ PREFS->lst_ope_columns[i++] = LST_DSPOPE_MEMO;
+ PREFS->lst_ope_columns[i++] = -LST_DSPOPE_ACCOUNT;
PREFS->lst_ope_sort_id = LST_DSPOPE_DATE;
PREFS->lst_ope_sort_order = GTK_SORT_ASCENDING;
+ for( i=0;i<NUM_LST_DSPOPE;i++)
+ PREFS->lst_ope_col_width[i] = -1;
//PREFS->base_cur.nbdecimal = 2;
//PREFS->base_cur.separator = TRUE;
- PREFS->date_range_wal = FLT_RANGE_LASTMONTH;
- PREFS->date_range_txn = FLT_RANGE_LAST12MONTHS;
- PREFS->date_range_rep = FLT_RANGE_THISYEAR;
-
+ //PREFS->date_range_wal = FLT_RANGE_LASTMONTH;
+ //PREFS->date_range_txn = FLT_RANGE_LAST12MONTHS;
+ //PREFS->date_range_rep = FLT_RANGE_THISYEAR;
+
+ //v5.2 change to let the example file show things
+ PREFS->date_range_wal = FLT_RANGE_ALLDATE;
+ PREFS->date_range_txn = FLT_RANGE_ALLDATE;
+ PREFS->date_range_rep = FLT_RANGE_ALLDATE;
+ PREFS->date_future_nbdays = 0;
+
+ //import/export
+ PREFS->dtex_nointro = TRUE;
+ PREFS->dtex_ucfirst = FALSE;
+ //PREFS->dtex_datefmt
+ PREFS->dtex_ofxname = 1;
+ PREFS->dtex_ofxmemo = 2;
+ PREFS->dtex_qifmemo = TRUE;
+ PREFS->dtex_qifswap = FALSE;
//todo: add intelligence here
PREFS->euro_active = FALSE;
PREFS->euro_country = 0;
PREFS->euro_value = 1.0;
+
+ da_cur_initformat(&PREFS->minor_cur);
+
//PREFS->euro_nbdec = 2;
//PREFS->euro_thsep = TRUE;
//PREFS->euro_symbol = g_strdup("??");
PREFS->budg_showdetail = FALSE;
PREFS->report_color_scheme = CHART_COLMAP_HOMEBANK;
- PREFS->chart_legend = FALSE;
+ //PREFS->chart_legend = FALSE;
PREFS->vehicle_unit_ismile = FALSE;
PREFS->vehicle_unit_isgal = FALSE;
- gchar** plugin_path = g_new0(gchar**, 4);
+ gchar** plugin_path = g_new0(gchar*, 4);
i = 0;
const gchar* env = g_getenv("HOMEBANK_PLUGINS");
if (env) {
PREFS->ext_path = plugin_path;
PREFS->ext_whitelist = NULL;
- _homebank_pref_createformat();
_homebank_pref_init_measurement_units();
}
}
}
+
+
+
static void homebank_pref_get_boolean(
GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
gboolean *storage)
{
+ DB( g_print(" search %s in %s\n", key, group_name) );
if( g_key_file_has_key(key_file, group_name, key, NULL) )
{
*storage = g_key_file_get_boolean(key_file, group_name, key, NULL);
+ DB( g_print(" stored boolean %d for %s at %x\n", *storage, key, *storage) );
}
}
const gchar *key,
gint *storage)
{
-
DB( g_print(" search %s in %s\n", key, group_name) );
-
if( g_key_file_has_key(key_file, group_name, key, NULL) )
{
*storage = g_key_file_get_integer(key_file, group_name, key, NULL);
-
- DB( g_print(" store integer %d for %s at %x\n", *storage, key, *storage) );
+ DB( g_print(" stored integer %d for %s at %x\n", *storage, key, *storage) );
}
}
const gchar *key,
guint32 *storage)
{
+ DB( g_print(" search %s in %s\n", key, group_name) );
if( g_key_file_has_key(key_file, group_name, key, NULL) )
{
*storage = g_key_file_get_integer(key_file, group_name, key, NULL);
+ DB( g_print(" stored guint32 %d for %s at %x\n", *storage, key, *storage) );
}
}
const gchar *key,
gshort *storage)
{
+ DB( g_print(" search %s in %s\n", key, group_name) );
if( g_key_file_has_key(key_file, group_name, key, NULL) )
{
*storage = (gshort)g_key_file_get_integer(key_file, group_name, key, NULL);
+ DB( g_print(" stored short %d for %s at %x\n", *storage, key, *storage) );
}
}
string = g_key_file_get_string(key_file, group_name, key, NULL);
if( string != NULL )
{
- *storage = g_strdup(string);
+ //*storage = g_strdup(string);
+ //leak
+ *storage = string; //already a new allocated string
//DB( g_print(" store '%s' for %s at %x\n", string, key, *storage) );
}
}
-static void homebank_pref_currfmt_convert(struct CurrencyFmt *cur, gchar *prefix, gchar *suffix)
+static void homebank_pref_currfmt_convert(Currency *cur, gchar *prefix, gchar *suffix)
{
if( (prefix != NULL) && (strlen(prefix) > 0) )
{
cur->symbol = g_strdup(prefix);
- cur->is_prefix = TRUE;
+ cur->sym_prefix = TRUE;
}
else if( (suffix != NULL) )
{
cur->symbol = g_strdup(suffix);
- cur->is_prefix = FALSE;
+ cur->sym_prefix = FALSE;
}
}
gboolean retval = FALSE;
gchar *group, *filename;
guint32 version;
+gboolean loaded;
GError *error = NULL;
DB( g_print("\n[preferences] pref load\n") );
DB( g_print(" - filename: %s\n", filename) );
-
- if(g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, NULL))
+ error = NULL;
+ loaded = g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, &error);
+ if( error )
+ {
+ g_warning("unable to load file %s: %s", filename, error->message);
+ g_error_free (error);
+ }
+
+ if( loaded == TRUE )
{
group = "General";
homebank_pref_get_string(keyfile, group, "ColorInc" , &PREFS->color_inc);
homebank_pref_get_string(keyfile, group, "ColorWarn", &PREFS->color_warn);
- homebank_pref_get_boolean(keyfile, group, "RulesHint", &PREFS->rules_hint);
+ if( version <= 500 )
+ {
+ gboolean rules_hint;
+ homebank_pref_get_boolean(keyfile, group, "RulesHint", &rules_hint);
+ if( rules_hint == TRUE )
+ PREFS->grid_lines = GTK_TREE_VIEW_GRID_LINES_HORIZONTAL;
+
+ }
+ else
+ homebank_pref_get_short(keyfile, group, "GridLines", &PREFS->grid_lines);
}
DB( g_print(" - color exp: %s\n", PREFS->color_exp) );
homebank_pref_get_boolean(keyfile, group, "ShowSplash", &PREFS->showsplash);
homebank_pref_get_boolean(keyfile, group, "LoadLast", &PREFS->loadlast);
homebank_pref_get_boolean(keyfile, group, "AppendScheduled", &PREFS->appendscheduled);
+ homebank_pref_get_boolean(keyfile, group, "UpdateCurrency", &PREFS->do_update_currency);
+
+ homebank_pref_get_boolean(keyfile, group, "BakIsAutomatic", &PREFS->bak_is_automatic);
+ homebank_pref_get_short(keyfile, group, "BakMaxNumCopies", &PREFS->bak_max_num_copies);
homebank_pref_get_boolean(keyfile, group, "HeritDate", &PREFS->heritdate);
homebank_pref_get_boolean(keyfile, group, "HideReconciled", &PREFS->hidereconciled);
+ homebank_pref_get_boolean(keyfile, group, "ShowRemind", &PREFS->showremind);
+ homebank_pref_get_boolean(keyfile, group, "TxnMemoAcp", &PREFS->txn_memoacp);
+ homebank_pref_get_short(keyfile, group, "TxnMemoAcpDays", &PREFS->txn_memoacp_days);
+
if( g_key_file_has_key(keyfile, group, "ColumnsOpe", NULL) )
{
gboolean *bsrc;
- gint *src, i;
+ gint *src, i, j;
gsize length;
if(version <= 2) //retrieve old 0.1 or 0.2 visibility boolean
{
- bsrc = g_key_file_get_boolean_list(keyfile, group, "ColumnsOpe", &length, &error);
+ bsrc = g_key_file_get_boolean_list(keyfile, group, "ColumnsOpe", &length, NULL);
if( length == NUM_LST_DSPOPE-1 )
{
//and convert
}
else
{
- src = g_key_file_get_integer_list(keyfile, group, "ColumnsOpe", &length, &error);
+ src = g_key_file_get_integer_list(keyfile, group, "ColumnsOpe", &length, NULL);
DB( g_print(" - length %d (max=%d)\n", length, NUM_LST_DSPOPE) );
- if( length == NUM_LST_DSPOPE-1 )
+ if( length == NUM_LST_DSPOPE )
{
DB( g_print(" - copying column order from pref file\n") );
memcpy(PREFS->lst_ope_columns, src, length*sizeof(gint));
DB( g_print(" - upgrade from v7\n") );
DB( g_print(" - copying column order from pref file\n") );
memcpy(PREFS->lst_ope_columns, src, length*sizeof(gint));
+ //append balance column
PREFS->lst_ope_columns[10] = LST_DSPOPE_BALANCE;
}
}
+ if(version < 500)
+ {
+ if( length == NUM_LST_DSPOPE-2 ) //1 less column before v4.5.1
+ {
+ DB( g_print(" - upgrade prior v5.0\n") );
+ DB( g_print(" - copying column order from pref file\n") );
+ gboolean added = FALSE;
+ for(i=0,j=0; i<NUM_LST_DSPOPE-1 ; i++)
+ {
+ if( added == FALSE &&
+ (ABS(src[i]) == LST_DSPOPE_AMOUNT ||
+ ABS(src[i]) == LST_DSPOPE_EXPENSE ||
+ ABS(src[i]) == LST_DSPOPE_INCOME) )
+ {
+ PREFS->lst_ope_columns[j++] = LST_DSPOPE_CLR;
+ added = TRUE;
+ }
+ PREFS->lst_ope_columns[j++] = src[i];
+ }
+ }
+ }
+
}
g_free(src);
}
+ if( g_key_file_has_key(keyfile, group, "ColumnsOpeWidth", NULL) )
+ {
+ gint *src;
+ gsize length;
+
+ src = g_key_file_get_integer_list(keyfile, group, "ColumnsOpeWidth", &length, NULL);
+
+ DB( g_print(" - length %d (max=%d)\n", length, NUM_LST_DSPOPE) );
+
+ if( length == NUM_LST_DSPOPE )
+ {
+ DB( g_print(" - copying column width from pref file\n") );
+ memcpy(PREFS->lst_ope_col_width, src, length*sizeof(gint));
+ }
+
+ //leak
+ g_free(src);
+
+ }
+
homebank_pref_get_integer(keyfile, group, "OpeSortId", &PREFS->lst_ope_sort_id);
homebank_pref_get_integer(keyfile, group, "OpeSortOrder", &PREFS->lst_ope_sort_order);
homebank_pref_get_wingeometry(keyfile, group, "Ove", &PREFS->ove_wg);
homebank_pref_get_wingeometry(keyfile, group, "Bud", &PREFS->bud_wg);
homebank_pref_get_wingeometry(keyfile, group, "Car", &PREFS->cst_wg);
+
+ homebank_pref_get_wingeometry(keyfile, group, "Txn", &PREFS->txn_wg);
+
if(version <= 7) //set maximize to 0
{
PREFS->wal_wg.s = 0;
PREFS->acc_wg.s = 0;
+ PREFS->txn_wg.s = 0;
PREFS->sta_wg.s = 0;
PREFS->tme_wg.s = 0;
PREFS->ove_wg.s = 0;
homebank_pref_get_boolean(keyfile, group, "WalSpending", &PREFS->wal_spending);
homebank_pref_get_boolean(keyfile, group, "WalUpcoming", &PREFS->wal_upcoming);
+ //since 5.1.3
+ group = "Panels";
- group = "Format";
+ DB( g_print(" -> ** Panels\n") );
- DB( g_print(" -> ** Format\n") );
+ homebank_pref_get_short(keyfile, group, "AccColAccW", &PREFS->pnl_acc_col_acc_width);
+ homebank_pref_get_short(keyfile, group, "AccShowBy" , &PREFS->pnl_acc_show_by);
- homebank_pref_get_string(keyfile, group, "DateFmt", &PREFS->date_format);
+ homebank_pref_get_short(keyfile, group, "UpcColPayW", &PREFS->pnl_upc_col_pay_width);
+ homebank_pref_get_short(keyfile, group, "UpcColMemW", &PREFS->pnl_upc_col_mem_width);
- if(version <= 1)
- {
- //retrieve old 0.1 preferences
- homebank_pref_get_short(keyfile, group, "NumNbDec", &PREFS->base_cur.frac_digits);
- //PREFS->base_cur.separator = g_key_file_get_boolean (keyfile, group, "NumSep", NULL);
- }
- else
- {
- if(version < 460)
- {
- gchar *prefix = NULL;
- gchar *suffix = NULL;
+ homebank_pref_get_string(keyfile, group, "PnlLstTab", &PREFS->pnl_list_tab);
- homebank_pref_get_string(keyfile, group, "PreSymbol", &prefix);
- homebank_pref_get_string(keyfile, group, "SufSymbol", &suffix);
- homebank_pref_currfmt_convert(&PREFS->base_cur, prefix, suffix);
- g_free(prefix);
- g_free(suffix);
- }
- else
- {
- homebank_pref_get_string(keyfile, group, "Symbol", &PREFS->base_cur.symbol);
- homebank_pref_get_boolean(keyfile, group, "IsPrefix", &PREFS->base_cur.is_prefix);
- }
- homebank_pref_get_string(keyfile, group, "DecChar" , &PREFS->base_cur.decimal_char);
- homebank_pref_get_string(keyfile, group, "GroupChar", &PREFS->base_cur.grouping_char);
- homebank_pref_get_short(keyfile, group, "FracDigits", &PREFS->base_cur.frac_digits);
+ group = "Format";
- //fix 378992/421228
- if( PREFS->base_cur.frac_digits > MAX_FRAC_DIGIT )
- PREFS->base_cur.frac_digits = MAX_FRAC_DIGIT;
- }
+ DB( g_print(" -> ** Format\n") );
+
+ homebank_pref_get_string(keyfile, group, "DateFmt", &PREFS->date_format);
if(version < 460)
{
homebank_pref_get_integer(keyfile, group, "DateRangeWal", &PREFS->date_range_wal);
homebank_pref_get_integer(keyfile, group, "DateRangeTxn", &PREFS->date_range_txn);
+ homebank_pref_get_integer(keyfile, group, "DateFutureNbDays", &PREFS->date_future_nbdays);
homebank_pref_get_integer(keyfile, group, "DateRangeRep", &PREFS->date_range_rep);
if(version <= 7)
else
{
homebank_pref_get_string(keyfile, group, "Symbol", &PREFS->minor_cur.symbol);
- homebank_pref_get_boolean(keyfile, group, "IsPrefix", &PREFS->minor_cur.is_prefix);
+ homebank_pref_get_boolean(keyfile, group, "IsPrefix", &PREFS->minor_cur.sym_prefix);
}
homebank_pref_get_string(keyfile, group, "DecChar" , &PREFS->minor_cur.decimal_char);
homebank_pref_get_string(keyfile, group, "GroupChar", &PREFS->minor_cur.grouping_char);
if( PREFS->minor_cur.frac_digits > MAX_FRAC_DIGIT )
PREFS->minor_cur.frac_digits = MAX_FRAC_DIGIT;
+ da_cur_initformat(&PREFS->minor_cur);
}
//PREFS->euro_symbol = g_locale_to_utf8(tmpstr, -1, NULL, NULL, NULL);
DB( g_print(" -> ** Exchange\n") );
+ homebank_pref_get_boolean(keyfile, group, "DoIntro", &PREFS->dtex_nointro);
+ homebank_pref_get_boolean(keyfile, group, "UcFirst", &PREFS->dtex_ucfirst);
homebank_pref_get_integer(keyfile, group, "DateFmt", &PREFS->dtex_datefmt);
+ homebank_pref_get_integer(keyfile, group, "OfxName", &PREFS->dtex_ofxname);
homebank_pref_get_integer(keyfile, group, "OfxMemo", &PREFS->dtex_ofxmemo);
+ homebank_pref_get_boolean(keyfile, group, "QifMemo", &PREFS->dtex_qifmemo);
+ homebank_pref_get_boolean(keyfile, group, "QifSwap", &PREFS->dtex_qifswap);
//group = "Chart";
g_free(filename);
g_key_file_free (keyfile);
- _homebank_pref_createformat();
_homebank_pref_init_measurement_units();
}
return retval;
}
+
static void homebank_pref_set_string(
GKeyFile *key_file,
const gchar *group_name,
gboolean retval = FALSE;
gchar *group, *filename;
gsize length;
+GError *error = NULL;
DB( g_print("\n[preferences] pref save\n") );
g_key_file_set_integer (keyfile, group, "BarStyle", PREFS->toolbar_style);
//g_key_file_set_integer (keyfile, group, "BarImageSize", PREFS->image_size);
+
+
g_key_file_set_boolean (keyfile, group, "CustomColors", PREFS->custom_colors);
g_key_file_set_string (keyfile, group, "ColorExp" , PREFS->color_exp);
g_key_file_set_string (keyfile, group, "ColorInc" , PREFS->color_inc);
g_key_file_set_string (keyfile, group, "ColorWarn", PREFS->color_warn);
- g_key_file_set_boolean (keyfile, group, "RulesHint", PREFS->rules_hint);
-
+ g_key_file_set_integer (keyfile, group, "GridLines", PREFS->grid_lines);
homebank_pref_set_string (keyfile, group, "WalletPath" , PREFS->path_hbfile);
homebank_pref_set_string (keyfile, group, "ImportPath" , PREFS->path_import);
homebank_pref_set_string (keyfile, group, "ExportPath" , PREFS->path_export);
//g_key_file_set_string (keyfile, group, "NavigatorPath", PREFS->path_navigator);
+ g_key_file_set_boolean (keyfile, group, "BakIsAutomatic", PREFS->bak_is_automatic);
+ g_key_file_set_integer (keyfile, group, "BakMaxNumCopies", PREFS->bak_max_num_copies);
+
g_key_file_set_boolean (keyfile, group, "ShowSplash", PREFS->showsplash);
g_key_file_set_boolean (keyfile, group, "LoadLast", PREFS->loadlast);
g_key_file_set_boolean (keyfile, group, "AppendScheduled", PREFS->appendscheduled);
+ g_key_file_set_boolean (keyfile, group, "UpdateCurrency", PREFS->do_update_currency);
g_key_file_set_boolean (keyfile, group, "HeritDate", PREFS->heritdate);
g_key_file_set_boolean (keyfile, group, "HideReconciled", PREFS->hidereconciled);
+ g_key_file_set_boolean (keyfile, group, "ShowRemind", PREFS->showremind);
+ g_key_file_set_boolean (keyfile, group, "TxnMemoAcp", PREFS->txn_memoacp);
+ g_key_file_set_integer (keyfile, group, "TxnMemoAcpDays" , PREFS->txn_memoacp_days);
- g_key_file_set_integer_list(keyfile, group, "ColumnsOpe", PREFS->lst_ope_columns, NUM_LST_DSPOPE-1);
+ g_key_file_set_integer_list(keyfile, group, "ColumnsOpe", PREFS->lst_ope_columns, NUM_LST_DSPOPE);
+ g_key_file_set_integer_list(keyfile, group, "ColumnsOpeWidth", PREFS->lst_ope_col_width, NUM_LST_DSPOPE);
g_key_file_set_integer (keyfile, group, "OpeSortId" , PREFS->lst_ope_sort_id);
g_key_file_set_integer (keyfile, group, "OpeSortOrder" , PREFS->lst_ope_sort_order);
g_key_file_set_integer_list(keyfile, group, "Bud", (gint *)&PREFS->bud_wg, 5);
g_key_file_set_integer_list(keyfile, group, "Car", (gint *)&PREFS->cst_wg, 5);
+ g_key_file_set_integer_list(keyfile, group, "Txn", (gint *)&PREFS->txn_wg, 5);
+
g_key_file_set_integer (keyfile, group, "WalVPaned" , PREFS->wal_vpaned);
g_key_file_set_integer (keyfile, group, "WalHPaned" , PREFS->wal_hpaned);
g_key_file_set_boolean (keyfile, group, "WalToolbar", PREFS->wal_toolbar);
g_key_file_set_boolean (keyfile, group, "WalSpending", PREFS->wal_spending);
g_key_file_set_boolean (keyfile, group, "WalUpcoming", PREFS->wal_upcoming);
+ //since 5.1.3
+ DB( g_print(" -> ** Panels\n") );
+
+ group = "Panels";
+ g_key_file_set_integer(keyfile, group, "AccColAccW", PREFS->pnl_acc_col_acc_width);
+ g_key_file_set_integer(keyfile, group, "AccShowBy" , PREFS->pnl_acc_show_by);
+
+ g_key_file_set_integer(keyfile, group, "UpcColPayW", PREFS->pnl_upc_col_pay_width);
+ g_key_file_set_integer(keyfile, group, "UpcColMemW", PREFS->pnl_upc_col_mem_width);
+
+ homebank_pref_set_string (keyfile, group, "PnlLstTab", PREFS->pnl_list_tab);
DB( g_print(" -> ** format\n") );
group = "Format";
homebank_pref_set_string (keyfile, group, "DateFmt" , PREFS->date_format);
- homebank_pref_set_string (keyfile, group, "Symbol" , PREFS->base_cur.symbol);
- g_key_file_set_boolean (keyfile, group, "IsPrefix" , PREFS->base_cur.is_prefix);
- homebank_pref_set_string (keyfile, group, "DecChar" , PREFS->base_cur.decimal_char);
- homebank_pref_set_string (keyfile, group, "GroupChar" , PREFS->base_cur.grouping_char);
- g_key_file_set_integer (keyfile, group, "FracDigits", PREFS->base_cur.frac_digits);
-
//g_key_file_set_boolean (keyfile, group, "UKUnits" , PREFS->imperial_unit);
g_key_file_set_boolean (keyfile, group, "UnitIsMile" , PREFS->vehicle_unit_ismile);
g_key_file_set_boolean (keyfile, group, "UnitIsGal" , PREFS->vehicle_unit_isgal);
group = "Filter";
g_key_file_set_integer (keyfile, group, "DateRangeWal", PREFS->date_range_wal);
g_key_file_set_integer (keyfile, group, "DateRangeTxn", PREFS->date_range_txn);
+ g_key_file_set_integer (keyfile, group, "DateFutureNbDays", PREFS->date_future_nbdays);
g_key_file_set_integer (keyfile, group, "DateRangeRep", PREFS->date_range_rep);
DB( g_print(" -> ** euro\n") );
g_ascii_dtostr(ratestr, 63, PREFS->euro_value);
homebank_pref_set_string (keyfile, group, "ChangeRate", ratestr);
homebank_pref_set_string (keyfile, group, "Symbol" , PREFS->minor_cur.symbol);
- g_key_file_set_boolean (keyfile, group, "IsPrefix" , PREFS->minor_cur.is_prefix);
+ g_key_file_set_boolean (keyfile, group, "IsPrefix" , PREFS->minor_cur.sym_prefix);
homebank_pref_set_string (keyfile, group, "DecChar" , PREFS->minor_cur.decimal_char);
homebank_pref_set_string (keyfile, group, "GroupChar" , PREFS->minor_cur.grouping_char);
g_key_file_set_integer (keyfile, group, "FracDigits", PREFS->minor_cur.frac_digits);
group = "Exchange";
+ g_key_file_set_boolean (keyfile, group, "DoIntro", PREFS->dtex_nointro);
+ g_key_file_set_boolean (keyfile, group, "UcFirst", PREFS->dtex_ucfirst);
g_key_file_set_integer (keyfile, group, "DateFmt", PREFS->dtex_datefmt);
+ g_key_file_set_integer (keyfile, group, "OfxName", PREFS->dtex_ofxname);
g_key_file_set_integer (keyfile, group, "OfxMemo", PREFS->dtex_ofxmemo);
+ g_key_file_set_boolean (keyfile, group, "QifMemo", PREFS->dtex_qifmemo);
+ g_key_file_set_boolean (keyfile, group, "QifSwap", PREFS->dtex_qifswap);
+
//group = "Chart";
//g_key_file_set_boolean (keyfile, group, "Legend", PREFS->chart_legend);
DB( g_print(" -> filename: %s\n", filename) );
- g_file_set_contents(filename, contents, length, NULL);
-
+ g_file_set_contents(filename, contents, length, &error);
+ if( error )
+ {
+ g_warning("unable to save file %s: %s", filename, error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+
DB( g_print(" -> contents: %s\n", contents) );
DB( g_print(" -> freeing filename\n") );
g_key_file_free (keyfile);
}
- _homebank_pref_createformat();
_homebank_pref_init_measurement_units();
return retval;