/* 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.
*
#include "homebank.h"
#include "ui-pref.h"
-#include "dsp_mainwindow.h"
+#include "dsp-mainwindow.h"
#include "gtk-chart-colors.h"
+#include "ext.h"
+
#include "ui-currency.h"
enum
{
- PREF_GENERAL,
- PREF_INTERFACE,
- PREF_COLUMNS,
- PREF_DISPLAY,
- PREF_IMPORT,
- PREF_REPORT,
- PREF_EURO,
- PREF_MAX
+ EXT_COLUMN_ENABLED = 0,
+ EXT_COLUMN_LABEL,
+ EXT_COLUMN_TOOLTIP,
+ EXT_COLUMN_PLUGIN_NAME,
+ EXT_NUM_COLUMNS
};
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"
};
static gchar *pref_name[PREF_MAX] = {
N_("General"),
N_("Interface"),
+N_("Locale"),
N_("Transactions"),
-N_("Display format"),
N_("Import/Export"),
N_("Report"),
-N_("Euro minor")
+N_("Backup"),
+N_("Folders"),
+N_("Euro minor"),
+N_("Plugins")
//
};
N_("Ignore"),
N_("Memo"),
N_("Payee"),
+N_("Info"),
NULL
};
NULL
};
+gchar *CYA_IMPORT_CSVSEPARATOR[] = {
+N_("Tab"),
+N_("Comma"),
+N_("Semicolon"),
+N_("Space"),
+NULL
+};
+
+
extern gchar *CYA_CHART_COLORSCHEME[];
extern gchar *CYA_MONTHS[];
};
+static void list_ext_colpref_get(GtkTreeView *treeview, GList **columns);
+
+
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
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");
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);
}
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)
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);
// 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);
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;
//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));
+ 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);
// 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));
ui_gtk_entry_replace_text(data->ST_euro_groupingchar, &PREFS->minor_cur.grouping_char);
PREFS->minor_cur.frac_digits = gtk_spin_button_get_value(GTK_SPIN_BUTTON(data->NB_euro_fracdigits));
//PREFS->chart_legend = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->CM_chartlegend));
+
+ list_ext_colpref_get(GTK_TREE_VIEW(data->PI_plugin_columns), &(PREFS->ext_whitelist));
}
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();
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;
//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_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);
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);
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);
+ row = 1;
+ 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;
}
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);
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();
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);
"%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++;
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 :: 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_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);
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 ();
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_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;
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);
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 ();
}
-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;
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
- 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);
+ return content_grid;
+}
- 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);
+static GtkWidget *defpref_page_folders (struct defpref_data *data)
+{
+GtkWidget *content_grid, *group_grid, *hbox, *label, *widget;
+gint crow, row;
- // group :: Main window reports
+ 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(_("Main window reports"));
+ label = make_label_group(_("HomeBank 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(_("_Wallets:"));
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);
+
+ 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_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 :: Files folder
group_grid = gtk_grid_new ();
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(_("Exchange files"));
gtk_grid_attach (GTK_GRID (group_grid), label, 0, 0, 3, 1);
-
+
row = 1;
- label = make_label_widget(_("_Default:"));
+ 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_grid_attach (GTK_GRID (group_grid), hbox, 2, row, 1, 1);
widget = make_string(label);
- data->ST_path_hbfile = widget;
+ 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_hbfile = widget;
+ 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);
+ 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);
+
+
+
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;
+}
+
+
+void plugin_execute_action(GtkTreeView* treeview, GtkTreePath* path, GtkTreeViewColumn* col, gpointer userdata);
+
+static void
+toggle_plugin(GtkCellRendererToggle *cell, gchar* path_str, gpointer data)
+{
+ GtkTreeModel *model = (GtkTreeModel*)data;
+ GtkTreeIter iter;
+ GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+
+ const gchar* plugin;
+
+ gtk_tree_model_get_iter(model, &iter, path);
+ gtk_tree_model_get(model, &iter, EXT_COLUMN_PLUGIN_NAME, &plugin, -1);
+
+ gboolean enabled = ext_is_plugin_loaded(plugin);
+ if (enabled) {
+ ext_unload_plugin(plugin);
+ enabled = FALSE;
+ } else {
+ enabled = (ext_load_plugin(plugin) == 0);
+ if (!enabled) {
+ ext_run_modal(_("Plugin Error"), _("The plugin failed to load properly."), "error");
+ }
+ }
+
+ /* set new value */
+ gtk_list_store_set(GTK_LIST_STORE (model), &iter, EXT_COLUMN_ENABLED, enabled, -1);
+
+ /* clean up */
+ gtk_tree_path_free(path);
+}
+
+
+void plugin_execute_action(GtkTreeView* treeview, GtkTreePath* path, GtkTreeViewColumn* col, gpointer userdata)
+{
+ GtkTreeModel* model = gtk_tree_view_get_model(treeview);
+ GtkTreeIter iter;
+
+ if (gtk_tree_model_get_iter(model, &iter, path)) {
+ gchar* plugin_filename;
+ gtk_tree_model_get(model, &iter, EXT_COLUMN_PLUGIN_NAME, &plugin_filename, -1);
+ ext_execute_action(plugin_filename);
+ g_free(plugin_filename);
+ }
+}
+
+static GtkWidget *defpref_page_plugins (struct defpref_data *data)
+{
+ GtkWidget *container;
+ GtkListStore *store;
+ GtkTreeIter it;
+ GtkWidget* view;
+
+ container = gtk_vbox_new(FALSE, 0);
+
+ store = gtk_list_store_new(EXT_NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+ gchar** plugins = ext_list_plugins();
+ gchar** plugins_it;
+ for (plugins_it = plugins; *plugins_it; ++plugins_it) {
+
+ gboolean enabled = ext_is_plugin_loaded(*plugins_it);
+ GHashTable* metadata = ext_read_plugin_metadata(*plugins_it);
+ if (!metadata) {
+ metadata = g_hash_table_new(g_str_hash, g_str_equal);
+ }
+
+ gchar* tmp = NULL;
+
+ // NAME
+ gchar* name = g_hash_table_lookup(metadata, "name");
+ if (!name || *name == '\0') {
+ name = *plugins_it;
+ }
+ name = g_markup_escape_text(name, -1);
+ gchar* label = g_strdup_printf("<b>%s</b>", name);
+ gchar* tooltip = g_strdup_printf("<span size='x-large' weight='bold'>%s</span>", name);
+ g_free(name);
+
+ // VERSION
+ gchar* version = g_hash_table_lookup(metadata, "version");
+ if (version) {
+ version = g_markup_escape_text(version, -1);
+ tmp = label;
+ label = g_strdup_printf("%s %s", tmp, version);
+ g_free(tmp);
+ tmp = tooltip;
+ tooltip = g_strdup_printf("%s %s", tmp, version);
+ g_free(tmp);
+ g_free(version);
+ }
+
+ // ABSTRACT
+ gchar* abstract = g_hash_table_lookup(metadata, "abstract");
+ if (abstract) {
+ abstract = g_markup_escape_text(abstract, -1);
+ tmp = label;
+ label = g_strdup_printf("%s\n%s", tmp, abstract);
+ g_free(tmp);
+ g_free(abstract);
+ }
+
+ // AUTHOR
+ gchar* author = g_hash_table_lookup(metadata, "author");
+ if (author) {
+ author = g_markup_escape_text(author, -1);
+ tmp = tooltip;
+ tooltip = g_strdup_printf("%s\n%s", tmp, author);
+ g_free(tmp);
+ g_free(author);
+ }
+
+ // WEBSITE
+ gchar* website = g_hash_table_lookup(metadata, "website");
+ if (website) {
+ website = g_markup_escape_text(website, -1);
+ tmp = tooltip;
+ tooltip = g_strdup_printf("%s\n<b>%s:</b> %s", tmp, _("Website"), website);
+ g_free(tmp);
+ g_free(website);
+ }
+
+ // FILEPATH
+ tmp = ext_find_plugin(*plugins_it);
+ gchar* full = g_markup_escape_text(tmp, -1);
+ g_free(tmp);
+ tmp = tooltip;
+ tooltip = g_strdup_printf("%s\n<b>%s:</b> %s", tmp, _("File"), full);
+ g_free(tmp);
+ g_free(full);
+
+ g_hash_table_unref(metadata);
+
+ gtk_list_store_append(store, &it);
+ gtk_list_store_set(store, &it,
+ EXT_COLUMN_ENABLED, enabled,
+ EXT_COLUMN_LABEL, label,
+ EXT_COLUMN_TOOLTIP, tooltip,
+ EXT_COLUMN_PLUGIN_NAME, *plugins_it,
+ -1);
+
+ g_free(label);
+ g_free(tooltip);
+ }
+ g_strfreev(plugins);
+
+ view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ g_object_unref(store);
+
+ g_signal_connect(view, "row-activated", (GCallback)plugin_execute_action, NULL);
+
+ gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), TRUE);
+ gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(view), EXT_COLUMN_TOOLTIP);
+
+
+ GtkTreeViewColumn *col;
+ GtkCellRenderer *renderer;
+
+
+ col = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col, _("Enabled"));
+ gtk_tree_view_column_set_sort_column_id(col, EXT_COLUMN_ENABLED);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
+
+ renderer = gtk_cell_renderer_toggle_new();
+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
+ gtk_tree_view_column_add_attribute(col, renderer, "active", 0);
+ g_signal_connect(renderer, "toggled", G_CALLBACK(toggle_plugin), store);
+
+ col = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col, _("Plugin"));
+ gtk_tree_view_column_set_sort_column_id(col, EXT_COLUMN_LABEL);
+ gtk_tree_view_column_set_expand(col, TRUE);
+ /*gtk_tree_view_column_set_sort_order(col, GTK_SORT_ASCENDING);*/
+ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
+
+ renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
+ gtk_tree_view_column_add_attribute(col, renderer, "markup", EXT_COLUMN_LABEL);
+
+ data->PI_plugin_columns = view;
+
+ GtkWidget* sw = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_container_add(GTK_CONTAINER(sw), view);
+
+ gtk_box_pack_start(GTK_BOX(container), sw, TRUE, TRUE, 0);
+
+ return(container);
+}
+
+
static void defpref_selection(GtkTreeSelection *treeselection, gpointer user_data)
{
struct defpref_data *data;
/*
** 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 )
{
// the window creation
-GtkWidget *defpref_dialog_new (void)
+GtkWidget *defpref_dialog_new (gint initial_selection)
{
struct defpref_data data;
GtkWidget *window, *content, *mainvbox;
window = gtk_dialog_new_with_buttons (_("Preferences"),
GTK_WINDOW(GLOBALS->mainwindow),
0,
+ _("_Reset"),
+ 55,
_("_Cancel"),
GTK_RESPONSE_REJECT,
_("_OK"),
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);
gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
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
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
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);
+ //plugins
+ page = defpref_page_plugins(&data);
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL);
+
//todo:should move this
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data.CM_euro_enable), PREFS->euro_active);
//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);
gtk_window_resize(GTK_WINDOW(window), 640, 256);
- //select first row
- GtkTreePath *path = gtk_tree_path_new_first ();
+ //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);
gtk_tree_path_free(path);
gtk_widget_show_all (window);
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), initial_selection);
gint result;
gchar *old_lang;
g_free(old_lang);
break;
+
+ case 55:
+ defpref_reset (window, NULL);
+ break;
}
if(i <= LST_DSPOPE_DATE) // status, date always displayed
continue;
- //[i-1] here because lst_ope_columns[] do not store LST_DSPOPE_DATAS
+ //[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;
}
*/
+
+static void list_ext_colpref_get(GtkTreeView *treeview, GList **columns)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ g_list_free_full(*columns, g_free);
+ *columns = NULL;
+
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+
+ gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
+ while (valid) {
+ gboolean enabled = FALSE;
+ const gchar* name;
+
+ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter,
+ EXT_COLUMN_ENABLED, &enabled,
+ EXT_COLUMN_PLUGIN_NAME, &name,
+ -1);
+
+ if (enabled) {
+ *columns = g_list_append(*columns, g_strdup(name));
+ }
+
+ valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
+ }
+}
+