GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Enumerations | Functions
gnc-csv-trans-settings.h File Reference

CSV Import Settings. More...

Go to the source code of this file.

Data Structures

struct  CsvSettings
 

Enumerations

enum  SEP_BUTTON_TYPES {
  SEP_SPACE, SEP_TAB, SEP_COMMA, SEP_COLON,
  SEP_SEMICOLON, SEP_HYPHEN, SEP_NUM_OF_TYPES
}
 
enum  SETTINGS_COL { SET_GROUP, SET_NAME }
 

Functions

void gnc_csv_trans_find_settings (GtkTreeModel *settings_store)
 
gboolean gnc_csv_trans_save_settings (CsvSettings *settings_data, gchar *settings_name)
 
gboolean gnc_csv_trans_load_settings (CsvSettings *settings_data, gchar *group)
 
CsvSettingsgnc_csv_trans_new_settings_data (void)
 
void gnc_csv_trans_settings_data_free (CsvSettings *settings_data)
 

Detailed Description

CSV Import Settings.

Author
Copyright (c) 2014 Robert Fewell

Definition in file gnc-csv-trans-settings.h.

Enumeration Type Documentation

Enumeration for separator checkbutton types. These are the different types of checkbuttons that the user can click to configure separators in a delimited file.

Definition at line 33 of file gnc-csv-trans-settings.h.

33  {SEP_SPACE, SEP_TAB, SEP_COMMA, SEP_COLON, SEP_SEMICOLON, SEP_HYPHEN,
34  SEP_NUM_OF_TYPES};

Enumeration for the settings combo's

Definition at line 37 of file gnc-csv-trans-settings.h.

37 {SET_GROUP, SET_NAME};

Function Documentation

void gnc_csv_trans_find_settings ( GtkTreeModel *  settings_store)

Finds CSV settings entries in the key file and populates the tree model.

Parameters
settings_storeThe liststore that is used for the combo's which holds the key name and visual text.

Definition at line 102 of file gnc-csv-trans-settings.c.

103 {
104  GtkTreeIter iter;
105  GKeyFile *keyfile;
106  gchar **groups = NULL;
107  gint i;
108  gsize grouplenght;
109  GError *key_error = NULL;
110 
111  // Get the Key file
112  keyfile = gnc_state_get_current ();
113 
114  // Find all Groups
115  groups = g_key_file_get_groups (keyfile, &grouplenght);
116 
117  // Clear the list store
118  gtk_list_store_clear (GTK_LIST_STORE(settings_store));
119 
120  // Append the default entry
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);
123 
124  // Search all Groups for ones starting with prefix
125  for (i=0; i < grouplenght; i++)
126  {
127  if (g_str_has_prefix (groups[i], CSV_GROUP_PREFIX))
128  {
129  gchar *name = g_key_file_get_string (keyfile, groups[i], CSV_NAME, &key_error);
130 
131  if (key_error == NULL)
132  {
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);
135  }
136  else
137  {
138  g_warning ("Error reading group '%s' name '%s': %s", groups[i], CSV_NAME, key_error->message);
139  g_clear_error (&key_error);
140  }
141  g_free (name);
142  }
143  }
144  // free the strings
145  g_strfreev (groups);
146 }
GKeyFile * gnc_state_get_current(void)
Definition: gnc-state.c:252
gboolean gnc_csv_trans_load_settings ( CsvSettings settings_data,
gchar *  group 
)

Load the widget properties from a key File.

Parameters
settings_dataThe settings structure where all the settings are located.
groupThe group name where the settings are stored in the key file.
Returns
TRUE if there was a problem.

Definition at line 171 of file gnc-csv-trans-settings.c.

172 {
173  GKeyFile *keyfile;
174  gint i;
175  GError *key_error = NULL;
176  gboolean key_boolean = FALSE;
177  int key_int = 0;
178  gchar *key_char = NULL;
179  gboolean error = FALSE;
180 
181  // Get the Key file
182  keyfile = gnc_state_get_current ();
183 
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;
186  if (key_error)
187  error = load_error (&key_error, group);
188 
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;
191  if (key_error)
192  error = load_error (&key_error, group);
193 
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;
196  if (key_error)
197  error = load_error (&key_error, group);
198 
199  key_boolean = g_key_file_get_boolean (keyfile, group, CSV_FORMAT, &key_error);
200  settings_data->csv_format = (key_error) ? TRUE : key_boolean;
201  if (key_error)
202  error = load_error (&key_error, group);
203 
204  for (i = 0; i < SEP_NUM_OF_TYPES; i++)
205  {
206  gchar *sep;
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;
210  if (key_error)
211  error = load_error (&key_error, group);
212  g_free (sep);
213  }
214 
215  key_boolean = g_key_file_get_boolean (keyfile, group, CSV_CUSTOM, &key_error);
216  settings_data->custom = (key_error) ? FALSE : key_boolean;
217  if (key_error)
218  error = load_error (&key_error, group);
219 
220  settings_data->custom_entry = g_key_file_get_string (keyfile, group, CSV_CUSTOM_ENTRY, &key_error);
221  if (key_error)
222  error = load_error (&key_error, group);
223 
224  key_int = g_key_file_get_integer (keyfile, group, CSV_DATE, &key_error);
225  settings_data->date_active = (key_error) ? 0 : key_int;
226  if (key_error)
227  error = load_error (&key_error, group);
228 
229  key_int = g_key_file_get_integer (keyfile, group, CSV_CURRENCY, &key_error);
230  settings_data->currency_active = (key_error) ? 0 : key_int;
231  if (key_error)
232  error = load_error (&key_error, group);
233 
234  key_char = g_key_file_get_string (keyfile, group, CSV_ENCODING, &key_error);
235  settings_data->encoding = (key_error) ? "UTF-8" : key_char;
236  if (key_error)
237  error = load_error (&key_error, group);
238 
239  settings_data->column_types = g_key_file_get_string (keyfile, group, CSV_COL_TYPES, &key_error);
240  if (key_error)
241  error = load_error (&key_error, group);
242 
243  settings_data->column_widths = g_key_file_get_string (keyfile, group, CSV_COL_WIDTHS, &key_error);
244  if (key_error)
245  error = load_error (&key_error, group);
246 
247  g_free (key_char);
248  return error;
249 }
GKeyFile * gnc_state_get_current(void)
Definition: gnc-state.c:252
CsvSettings* gnc_csv_trans_new_settings_data ( void  )

Create a new CsvSettings structure and set default values.

Returns
CsvSettings settings structure.

Definition at line 60 of file gnc-csv-trans-settings.c.

61 {
62  CsvSettings* settings_data = g_new (CsvSettings, 1);
63  int i;
64 
65  settings_data->header_rows = 1;
66  settings_data->skip_alt_rows = FALSE;
67  settings_data->csv_format = TRUE;
68 
69  settings_data->encoding = "UTF-8";
70 
71  for (i = 0; i < SEP_NUM_OF_TYPES; i++)
72  {
73  settings_data->separator[i] = FALSE;
74  }
75 
76  settings_data->custom = FALSE;
77  settings_data->date_active = 0;
78  settings_data->currency_active = 0;
79 
80  return settings_data;
81 }
gboolean gnc_csv_trans_save_settings ( CsvSettings settings_data,
gchar *  settings_name 
)

Save the gathered widget properties to a key File.

Parameters
settings_dataThe settings structure where all the settings are located.
settings_nameThe name the settings will be stored under.
Returns
TRUE if there was a problem in saving.

Definition at line 258 of file gnc-csv-trans-settings.c.

259 {
260  GKeyFile *keyfile;
261  gchar **groups = NULL;
262  gint i;
263  gsize grouplenght;
264  gchar *group = NULL;
265  gchar *test_string = NULL;
266  GError *key_error = NULL;
267  gboolean error = FALSE;
268 
269  // Get the Key file
270  keyfile = gnc_state_get_current ();
271 
272  // Find all Groups
273  groups = g_key_file_get_groups (keyfile, &grouplenght);
274 
275  // Search all Groups for ones starting with prefix
276  for (i=0; i < grouplenght; i++)
277  {
278  if (g_str_has_prefix (groups[i], CSV_GROUP_PREFIX))
279  {
280  gchar *name = g_key_file_get_string (keyfile, groups[i], CSV_NAME, NULL);
281 
282  if (g_strcmp0 (name, settings_name) == 0)
283  group = g_strdup (groups[i]);
284 
285  g_free (name);
286  }
287  }
288 
289  // group is NULL, saving to a new group, create a guid
290  if (g_strcmp0 (group, NULL) == 0)
291  {
292  GncGUID *settings_guid;
293  gchar *string_guid;
294 
295  settings_guid = guid_new ();
296  string_guid = guid_to_string (settings_guid);
297 
298  group = g_strconcat (CSV_GROUP_PREFIX, string_guid, NULL);
299 
300  g_free (string_guid);
301  guid_free (settings_guid);
302  }
303 
304  // Start Saving the settings
305  g_key_file_set_string (keyfile, group, CSV_NAME, settings_name);
306 
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);
311 
312  for (i = 0; i < SEP_NUM_OF_TYPES; i++)
313  {
314  gchar *sep;
315  sep = g_strdup_printf ("%s%d", CSV_SEP, i);
316  g_key_file_set_boolean (keyfile, group, sep, settings_data->separator[i]);
317  g_free (sep);
318  }
319 
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);
322 
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);
325 
326  g_key_file_set_string (keyfile, group, CSV_ENCODING, settings_data->encoding);
327 
328  g_key_file_set_string (keyfile, group, CSV_COL_TYPES, settings_data->column_types);
329 
330  g_key_file_set_string (keyfile, group, CSV_COL_WIDTHS, settings_data->column_widths);
331 
332  // free the strings
333  g_free (settings_name);
334  g_strfreev (groups);
335 
336  // Do a test read of column types
337  test_string = g_key_file_get_string (keyfile, group, CSV_COL_TYPES, &key_error);
338 
339  if ((key_error) || (!g_strcmp0 (test_string, settings_data->column_types) == 0))
340  {
341  if (key_error)
342  {
343  g_warning ("Error reading group %s key %s: %s", group, CSV_COL_TYPES, key_error->message);
344  g_error_free (key_error);
345  }
346  else
347  g_warning ("Error comparing group %s key %s: '%s' and '%s'", group, CSV_COL_TYPES, test_string, group);
348  error = TRUE;
349  }
350  g_free (group);
351  g_free (test_string);
352  return error;
353 }
GncGUID * guid_new(void)
GKeyFile * gnc_state_get_current(void)
Definition: gnc-state.c:252
Definition: guid.h:65
gchar * guid_to_string(const GncGUID *guid)
void gnc_csv_trans_settings_data_free ( CsvSettings settings_data)

Free the CsvSettings structure.

Definition at line 89 of file gnc-csv-trans-settings.c.

90 {
91  /* All non-NULL pointers that have been initialized and must be freed. */
92  g_free (settings_data);
93 }