30 #include <glib/gi18n.h>
35 #define CSV_GROUP_PREFIX "CSV - "
36 #define CSV_NAME "Name"
37 #define CSV_FORMAT "CsvFormat"
38 #define CSV_ALT_ROWS "AltRows"
39 #define CSV_START_ROW "StartRow"
40 #define CSV_END_ROWS "EndRows"
42 #define CSV_SEP "Separator"
44 #define CSV_CUSTOM "Custom"
45 #define CSV_CUSTOM_ENTRY "CustomEntry"
47 #define CSV_DATE "DateActive"
48 #define CSV_CURRENCY "CurrencyActive"
50 #define CSV_ENCODING "Encoding"
51 #define CSV_COL_TYPES "ColumnTypes"
52 #define CSV_COL_WIDTHS "ColumnWidths"
65 settings_data->header_rows = 1;
66 settings_data->skip_alt_rows = FALSE;
67 settings_data->csv_format = TRUE;
69 settings_data->encoding =
"UTF-8";
71 for (i = 0; i < SEP_NUM_OF_TYPES; i++)
73 settings_data->separator[i] = FALSE;
76 settings_data->custom = FALSE;
77 settings_data->date_active = 0;
78 settings_data->currency_active = 0;
92 g_free (settings_data);
106 gchar **groups = NULL;
109 GError *key_error = NULL;
115 groups = g_key_file_get_groups (keyfile, &grouplenght);
118 gtk_list_store_clear (GTK_LIST_STORE(settings_store));
121 gtk_list_store_append (GTK_LIST_STORE(settings_store), &iter);
122 gtk_list_store_set (GTK_LIST_STORE(settings_store), &iter, SET_GROUP, NULL, SET_NAME, _(
"No Settings"), -1);
125 for (i=0; i < grouplenght; i++)
127 if (g_str_has_prefix (groups[i], CSV_GROUP_PREFIX))
129 gchar *name = g_key_file_get_string (keyfile, groups[i], CSV_NAME, &key_error);
131 if (key_error == NULL)
133 gtk_list_store_append (GTK_LIST_STORE(settings_store), &iter);
134 gtk_list_store_set (GTK_LIST_STORE(settings_store), &iter, SET_GROUP, groups[i], SET_NAME, name, -1);
138 g_warning (
"Error reading group '%s' name '%s': %s", groups[i], CSV_NAME, key_error->message);
139 g_clear_error (&key_error);
155 load_error (GError **key_error, gchar *group)
158 kerror = g_error_copy (*key_error);
159 g_warning (
"Error reading group '%s' : %s", group, kerror->message);
160 g_clear_error (key_error);
161 g_error_free (kerror);
175 GError *key_error = NULL;
176 gboolean key_boolean = FALSE;
178 gchar *key_char = NULL;
179 gboolean error = FALSE;
184 key_int = g_key_file_get_integer (keyfile, group, CSV_START_ROW, &key_error);
185 settings_data->header_rows = (key_error) ? 1 : key_int;
187 error = load_error (&key_error, group);
189 key_int = g_key_file_get_integer (keyfile, group, CSV_END_ROWS, &key_error);
190 settings_data->footer_rows = (key_error) ? 0 : key_int;
192 error = load_error (&key_error, group);
194 key_boolean = g_key_file_get_boolean (keyfile, group, CSV_ALT_ROWS, &key_error);
195 settings_data->skip_alt_rows = (key_error) ? FALSE : key_boolean;
197 error = load_error (&key_error, group);
199 key_boolean = g_key_file_get_boolean (keyfile, group, CSV_FORMAT, &key_error);
200 settings_data->csv_format = (key_error) ? TRUE : key_boolean;
202 error = load_error (&key_error, group);
204 for (i = 0; i < SEP_NUM_OF_TYPES; i++)
207 sep = g_strdup_printf (
"%s%d", CSV_SEP, i);
208 key_boolean = g_key_file_get_boolean (keyfile, group, sep, &key_error);
209 settings_data->separator[i] = (key_error) ? FALSE : key_boolean;
211 error = load_error (&key_error, group);
215 key_boolean = g_key_file_get_boolean (keyfile, group, CSV_CUSTOM, &key_error);
216 settings_data->custom = (key_error) ? FALSE : key_boolean;
218 error = load_error (&key_error, group);
220 settings_data->custom_entry = g_key_file_get_string (keyfile, group, CSV_CUSTOM_ENTRY, &key_error);
222 error = load_error (&key_error, group);
224 key_int = g_key_file_get_integer (keyfile, group, CSV_DATE, &key_error);
225 settings_data->date_active = (key_error) ? 0 : key_int;
227 error = load_error (&key_error, group);
229 key_int = g_key_file_get_integer (keyfile, group, CSV_CURRENCY, &key_error);
230 settings_data->currency_active = (key_error) ? 0 : key_int;
232 error = load_error (&key_error, group);
234 key_char = g_key_file_get_string (keyfile, group, CSV_ENCODING, &key_error);
235 settings_data->encoding = (key_error) ?
"UTF-8" : key_char;
237 error = load_error (&key_error, group);
239 settings_data->column_types = g_key_file_get_string (keyfile, group, CSV_COL_TYPES, &key_error);
241 error = load_error (&key_error, group);
243 settings_data->column_widths = g_key_file_get_string (keyfile, group, CSV_COL_WIDTHS, &key_error);
245 error = load_error (&key_error, group);
261 gchar **groups = NULL;
265 gchar *test_string = NULL;
266 GError *key_error = NULL;
267 gboolean error = FALSE;
273 groups = g_key_file_get_groups (keyfile, &grouplenght);
276 for (i=0; i < grouplenght; i++)
278 if (g_str_has_prefix (groups[i], CSV_GROUP_PREFIX))
280 gchar *name = g_key_file_get_string (keyfile, groups[i], CSV_NAME, NULL);
282 if (g_strcmp0 (name, settings_name) == 0)
283 group = g_strdup (groups[i]);
290 if (g_strcmp0 (group, NULL) == 0)
298 group = g_strconcat (CSV_GROUP_PREFIX, string_guid, NULL);
300 g_free (string_guid);
301 guid_free (settings_guid);
305 g_key_file_set_string (keyfile, group, CSV_NAME, settings_name);
307 g_key_file_set_integer (keyfile, group, CSV_START_ROW, settings_data->header_rows);
308 g_key_file_set_integer (keyfile, group, CSV_END_ROWS, settings_data->footer_rows);
309 g_key_file_set_boolean (keyfile, group, CSV_ALT_ROWS, settings_data->skip_alt_rows);
310 g_key_file_set_boolean (keyfile, group, CSV_FORMAT, settings_data->csv_format);
312 for (i = 0; i < SEP_NUM_OF_TYPES; i++)
315 sep = g_strdup_printf (
"%s%d", CSV_SEP, i);
316 g_key_file_set_boolean (keyfile, group, sep, settings_data->separator[i]);
320 g_key_file_set_boolean (keyfile, group, CSV_CUSTOM, settings_data->custom);
321 g_key_file_set_string (keyfile, group, CSV_CUSTOM_ENTRY, settings_data->custom_entry);
323 g_key_file_set_integer (keyfile, group, CSV_DATE, settings_data->date_active);
324 g_key_file_set_integer (keyfile, group, CSV_CURRENCY, settings_data->currency_active);
326 g_key_file_set_string (keyfile, group, CSV_ENCODING, settings_data->encoding);
328 g_key_file_set_string (keyfile, group, CSV_COL_TYPES, settings_data->column_types);
330 g_key_file_set_string (keyfile, group, CSV_COL_WIDTHS, settings_data->column_widths);
333 g_free (settings_name);
337 test_string = g_key_file_get_string (keyfile, group, CSV_COL_TYPES, &key_error);
339 if ((key_error) || (!g_strcmp0 (test_string, settings_data->column_types) == 0))
343 g_warning (
"Error reading group %s key %s: %s", group, CSV_COL_TYPES, key_error->message);
344 g_error_free (key_error);
347 g_warning (
"Error comparing group %s key %s: '%s' and '%s'", group, CSV_COL_TYPES, test_string, group);
351 g_free (test_string);
Functions to load, save and get gui state.
CsvSettings * gnc_csv_trans_new_settings_data(void)
void gnc_csv_trans_settings_data_free(CsvSettings *settings_data)
GKeyFile * gnc_state_get_current(void)
gboolean gnc_csv_trans_save_settings(CsvSettings *settings_data, gchar *settings_name)
void gnc_csv_trans_find_settings(GtkTreeModel *settings_store)
gchar * guid_to_string(const GncGUID *guid)
gboolean gnc_csv_trans_load_settings(CsvSettings *settings_data, gchar *group)