diff --git a/src/import-export/csv-imp/assistant-csv-trans-import.c b/src/import-export/csv-imp/assistant-csv-trans-import.c
index 5864c29d5e..0c1e8a4d79 100644
--- a/src/import-export/csv-imp/assistant-csv-trans-import.c
+++ b/src/import-export/csv-imp/assistant-csv-trans-import.c
@@ -75,8 +75,9 @@ typedef struct
GtkWidget *check_butt; /**< The widget for the check label button */
GtkWidget *start_row_spin; /**< The widget for the start row spinner */
GtkWidget *end_row_spin; /**< The widget for the end row spinner */
- int start_row; /**< The start row */
- int end_row; /**< The end row */
+ GtkWidget *skip_rows; /**< The widget for Skip alternate rows from start row */
+ int start_row; /**< The liststore start row, smallest is 0 */
+ int end_row; /**< The liststore end row, max number of rows -1 */
GncCsvParseData *parse_data; /**< The actual data we are previewing */
GOCharmapSel *encselector; /**< The widget for selecting the encoding */
@@ -141,9 +142,10 @@ void csv_import_trans_assistant_match_page_prepare (GtkAssistant *assistant, gpo
void csv_import_trans_assistant_finish_page_prepare (GtkAssistant *assistant, gpointer user_data);
void csv_import_trans_assistant_summary_page_prepare (GtkAssistant *assistant, gpointer user_data);
-void csv_import_trans_srow_cb (GtkWidget *spin, gpointer user_data );
-void csv_import_trans_erow_cb (GtkWidget *spin, gpointer user_data );
-void csv_import_trans_auto_cb (GtkWidget *cb, gpointer user_data );
+void csv_import_trans_srow_cb (GtkWidget *spin, gpointer user_data);
+void csv_import_trans_erow_cb (GtkWidget *spin, gpointer user_data);
+void csv_import_trans_skiprows_cb (GtkWidget *checkbox, gpointer user_data);
+void csv_import_trans_auto_cb (GtkWidget *cb, gpointer user_data);
void csv_import_trans_file_chooser_confirm_cb (GtkWidget *button, CsvImportTrans *info);
static void gnc_csv_preview_update_assist (CsvImportTrans* info);
@@ -235,22 +237,23 @@ void row_selection_update (CsvImportTrans* info)
GtkListStore *store;
GtkTreeIter iter;
gboolean valid;
- int i;
+ int i = 0;
store = GTK_LIST_STORE(gtk_tree_view_get_model (info->treeview));
+ /* Start of file */
for ( i = 0; i <= info->start_row; i++)
{
/* Modify background color of rows less than start row */
if (info->start_row == i)
{
- valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i );
+ valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
if (valid)
gtk_list_store_set (store, &iter, 0, NULL, -1);
}
else
{
- valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i );
+ valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
if (valid)
gtk_list_store_set (store, &iter, 0, "pink", -1);
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(store), &iter);
@@ -260,6 +263,7 @@ void row_selection_update (CsvImportTrans* info)
}
+ /* End of File */
for ( i = info->num_of_rows - 1; i >= info->end_row; i--)
{
/* Modify background color of rows more than end row */
@@ -279,6 +283,26 @@ void row_selection_update (CsvImportTrans* info)
gtk_list_store_set (store, &iter, 0, NULL, -1);
}
}
+
+ /* Remove background color from the start row to end row */
+ for ( i = info->start_row + 1; i <= info->end_row; i++)
+ {
+ valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
+ if (valid)
+ gtk_list_store_set (store, &iter, 0, NULL, -1);
+ }
+
+ /* Skip rows */
+ if (info->parse_data->skip_rows == TRUE)
+ {
+ for ( i = info->start_row + 1; i <= info->end_row; i = i + 2)
+ {
+ /* Modify background color of alternate rows from the start row */
+ valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
+ if (valid)
+ gtk_list_store_set (store, &iter, 0, "pink", -1);
+ }
+ }
}
@@ -298,7 +322,7 @@ void csv_import_trans_srow_cb (GtkWidget *spin, gpointer user_data)
info->parse_data->start_row = info->start_row;
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(info->end_row_spin));
- gtk_adjustment_set_lower (adj, info->start_row + 1 );
+ gtk_adjustment_set_lower (adj, info->start_row + 1);
/* Refresh the row highlighting */
row_selection_update (info);
@@ -321,7 +345,7 @@ void csv_import_trans_erow_cb (GtkWidget *spin, gpointer user_data)
info->parse_data->end_row = info->end_row + 1;
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(info->start_row_spin));
- gtk_adjustment_set_upper (adj, info->end_row + 1 );
+ gtk_adjustment_set_upper (adj, info->end_row + 1);
/* Refresh the row highlighting */
row_selection_update (info);
@@ -354,6 +378,23 @@ void csv_import_trans_auto_cb (GtkWidget *cb, gpointer user_data)
}
+/*******************************************************
+ * csv_import_trans_skiprows_cb
+ *
+ * call back for import skip rows checkbox
+ *******************************************************/
+void csv_import_trans_skiprows_cb (GtkWidget *checkbox, gpointer user_data)
+{
+ CsvImportTrans *info = user_data;
+
+ /* Set the skip_rows variable */
+ info->parse_data->skip_rows = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbox));
+
+ /* Refresh the row highlighting */
+ row_selection_update (info);
+}
+
+
/** Returns the cell renderer from a column in the preview's treeview.
* @param info The display of the data being imported
* @param col The number of the column whose cell renderer is being retrieved
@@ -975,7 +1016,7 @@ gboolean preview_settings_valid (CsvImportTrans* info)
gtk_tree_model_get_iter_first (store, &iter);
/* Get an iterator for the first required row in the data store. */
- gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(datastore), &iter2, NULL, info->start_row );
+ gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(datastore), &iter2, NULL, info->start_row);
/* Go through each of the columns. */
for (i = 0; i < ncols; i++)
@@ -1262,7 +1303,6 @@ static void gnc_csv_preview_update_assist (CsvImportTrans* info)
static
void load_settings (CsvImportTrans *info)
{
- info->start_row = 0;
info->start_row = 0;
info->account_page_step = TRUE;
info->match_parse_run = FALSE;
@@ -1340,6 +1380,8 @@ csv_import_trans_assistant_preview_page_prepare (GtkAssistant *assistant,
/* Set spin buttons not sensative */
gtk_widget_set_sensitive (info->start_row_spin, FALSE);
gtk_widget_set_sensitive (info->end_row_spin, FALSE);
+ gtk_widget_set_sensitive (info->skip_rows, FALSE);
+ info->parse_data->skip_rows = FALSE;
/* Set check button label */
gtk_label_set_text (GTK_LABEL(info->check_label), _("Skip Errors"));
@@ -1357,6 +1399,10 @@ csv_import_trans_assistant_preview_page_prepare (GtkAssistant *assistant,
gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->end_row_spin), info->num_of_rows);
}
+ /* Set start row */
+ adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(info->start_row_spin));
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->start_row_spin), 1);
+
/* Update the row selection highlight */
row_selection_update (info);
}
@@ -1706,6 +1752,7 @@ csv_import_trans_assistant_create (CsvImportTrans *info)
info->start_row_spin = GTK_WIDGET(gtk_builder_get_object (builder, "start_row"));
info->end_row_spin = GTK_WIDGET(gtk_builder_get_object (builder, "end_row"));
+ info->skip_rows = GTK_WIDGET(gtk_builder_get_object (builder, "skip_rows"));
info->check_label = GTK_WIDGET(gtk_builder_get_object (builder, "check_label"));
info->check_butt = GTK_WIDGET(gtk_builder_get_object (builder, "check_butt"));
diff --git a/src/import-export/csv-imp/assistant-csv-trans-import.glade b/src/import-export/csv-imp/assistant-csv-trans-import.glade
index 154fe453ea..d61fb307d6 100644
--- a/src/import-export/csv-imp/assistant-csv-trans-import.glade
+++ b/src/import-export/csv-imp/assistant-csv-trans-import.glade
@@ -22,7 +22,7 @@ All transactions imported will be associated to one account for each import and
Various options exist for specifying the delimiter as well as a fixed width option. With the fixed width option, double click on the bar above the displayed rows to set the column width.
-There is an option for specifying the start and end row which can be used if you have some header text or multiple accounts in the same file.
+There is an option for specifying the start row, end row and an option to skip alternate rows begining from the start row. These can be used if you have some header text, a points collected status row or multiple accounts in the same file.
True
@@ -151,6 +151,21 @@ Select location and file name for the Import, then click 'OK'...
0
+
+
+
+ True
+ True
+ 1
+
+
@@ -219,7 +234,7 @@ Select location and file name for the Import, then click 'OK'...
FalseTrue
- 2
+ 3
@@ -232,7 +247,7 @@ Select location and file name for the Import, then click 'OK'...
FalseFalse10
- 3
+ 4
@@ -308,7 +323,7 @@ Select location and file name for the Import, then click 'OK'...
FalseFalse
- 4
+ 5
@@ -321,7 +336,7 @@ Select location and file name for the Import, then click 'OK'...
FalseFalse10
- 5
+ 6
diff --git a/src/import-export/csv-imp/gnc-csv-model.c b/src/import-export/csv-imp/gnc-csv-model.c
index 41a4ab6faa..db2c1840ad 100644
--- a/src/import-export/csv-imp/gnc-csv-model.c
+++ b/src/import-export/csv-imp/gnc-csv-model.c
@@ -340,6 +340,7 @@ GncCsvParseData* gnc_csv_new_parse_data (void)
parse_data->chunk = g_string_chunk_new(100 * 1024);
parse_data->start_row = 0;
parse_data->end_row = 1000;
+ parse_data->skip_rows = FALSE;
return parse_data;
}
@@ -1077,7 +1078,7 @@ int gnc_csv_parse_to_trans (GncCsvParseData* parse_data, Account* account,
/* This flag is TRUE if there are any errors in this row. */
gboolean errors = FALSE;
gchar* error_message = NULL;
- TransPropertyList* list = trans_property_list_new (account, parse_data->date_format, parse_data->currency_format );
+ TransPropertyList* list = trans_property_list_new (account, parse_data->date_format, parse_data->currency_format);
GncCsvTransLine* trans_line = NULL;
for (j = 0; j < line->len; j++)
@@ -1184,7 +1185,10 @@ int gnc_csv_parse_to_trans (GncCsvParseData* parse_data, Account* account,
}
else
{
- i++;
+ if (parse_data->skip_rows == FALSE)
+ i++;
+ else
+ i = i + 2;
}
}
diff --git a/src/import-export/csv-imp/gnc-csv-model.h b/src/import-export/csv-imp/gnc-csv-model.h
index ba8f6da6e9..4b00782301 100644
--- a/src/import-export/csv-imp/gnc-csv-model.h
+++ b/src/import-export/csv-imp/gnc-csv-model.h
@@ -115,6 +115,7 @@ typedef struct
int date_format; /**< The format of the text in the date columns from date_format_internal. */
int start_row; /**< The start row to generate transactions from. */
int end_row; /**< The end row to generate transactions from. */
+ gboolean skip_rows; /**< Skip Alternate Rows from start row. */
int currency_format; /**< The currency format, 0 for locale, 1 for comma dec and 2 for period */
} GncCsvParseData;