GnuCash c935c2f+
Loading...
Searching...
No Matches
Data Structures | Macros | Enumerations | Functions
assistant-csv-trans-import.cpp File Reference

CSV Import Assistant. More...

#include <guid.hpp>
#include <config.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <stdexcept>
#include <stdlib.h>
#include <cstdint>
#include "gnc-path.h"
#include "gnc-ui.h"
#include "gnc-uri-utils.h"
#include "gnc-ui-util.h"
#include "dialog-utils.h"
#include "gnc-component-manager.h"
#include "gnc-state.h"
#include "assistant-csv-trans-import.h"
#include "import-account-matcher.h"
#include "import-main-matcher.h"
#include "import-backend.h"
#include "gnc-account-sel.h"
#include "gnc-csv-gnumeric-popup.h"
#include "go-charmap-sel.h"
#include "gnc-imp-settings-csv-tx.hpp"
#include "gnc-import-tx.hpp"
#include "gnc-tokenizer-fw.hpp"
#include "gnc-tokenizer-csv.hpp"
#include <algorithm>
#include <exception>
#include <iostream>
#include <memory>
#include <numeric>
#include <string>
#include <tuple>
#include <gnc-locale-utils.hpp>
#include <boost/locale.hpp>

Go to the source code of this file.

Data Structures

class  CsvImpTransAssist
 

Macros

#define MIN_COL_WIDTH   70
 
#define GNC_PREFS_GROUP   "dialogs.import.csv"
 
#define ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS   "assistant-csv-trans-import"
 

Enumerations

enum  GncImportColumn { MAPPING_STRING , MAPPING_FULLPATH , MAPPING_ACCOUNT }
 
enum  PreviewHeaderComboCols { COL_TYPE_NAME , COL_TYPE_ID }
 
enum  PreviewDataTableCols {
  PREV_COL_FCOLOR , PREV_COL_BCOLOR , PREV_COL_STRIKE , PREV_COL_ERROR ,
  PREV_COL_ERR_ICON , PREV_N_FIXED_COLS
}
 
enum  {
  CONTEXT_STF_IMPORT_MERGE_LEFT = 1 , CONTEXT_STF_IMPORT_MERGE_RIGHT = 2 , CONTEXT_STF_IMPORT_SPLIT = 3 , CONTEXT_STF_IMPORT_WIDEN = 4 ,
  CONTEXT_STF_IMPORT_NARROW = 5
}
 

Functions

void csv_tximp_assist_prepare_cb (GtkAssistant *assistant, GtkWidget *page, CsvImpTransAssist *info)
 
void csv_tximp_assist_close_cb (GtkAssistant *gtkassistant, CsvImpTransAssist *info)
 
void csv_tximp_assist_finish_cb (GtkAssistant *gtkassistant, CsvImpTransAssist *info)
 
void csv_tximp_file_activated_cb (GtkFileChooser *chooser, CsvImpTransAssist *info)
 
void csv_tximp_file_selection_changed_cb (GtkFileChooser *chooser, CsvImpTransAssist *info)
 
void csv_tximp_preview_del_settings_cb (GtkWidget *button, CsvImpTransAssist *info)
 
void csv_tximp_preview_save_settings_cb (GtkWidget *button, CsvImpTransAssist *info)
 
void csv_tximp_preview_settings_sel_changed_cb (GtkComboBox *combo, CsvImpTransAssist *info)
 
void csv_tximp_preview_settings_text_inserted_cb (GtkEditable *entry, gchar *new_text, gint new_text_length, gint *position, CsvImpTransAssist *info)
 
void csv_tximp_preview_settings_text_changed_cb (GtkEntry *entry, CsvImpTransAssist *info)
 
void csv_tximp_preview_srow_cb (GtkSpinButton *spin, CsvImpTransAssist *info)
 
void csv_tximp_preview_erow_cb (GtkSpinButton *spin, CsvImpTransAssist *info)
 
void csv_tximp_preview_skiprows_cb (GtkToggleButton *checkbox, CsvImpTransAssist *info)
 
void csv_tximp_preview_skiperrors_cb (GtkToggleButton *checkbox, CsvImpTransAssist *info)
 
void csv_tximp_preview_multisplit_cb (GtkToggleButton *checkbox, CsvImpTransAssist *info)
 
void csv_tximp_preview_sep_button_cb (GtkWidget *widget, CsvImpTransAssist *info)
 
void csv_tximp_preview_sep_fixed_sel_cb (GtkToggleButton *csv_button, CsvImpTransAssist *info)
 
void csv_tximp_preview_acct_sel_cb (GtkWidget *widget, CsvImpTransAssist *info)
 
void csv_tximp_preview_enc_sel_cb (GOCharmapSel *selector, const char *encoding, CsvImpTransAssist *info)
 
void csv_tximp_acct_match_button_clicked_cb (GtkWidget *widget, CsvImpTransAssist *info)
 
bool csv_tximp_acct_match_view_clicked_cb (GtkWidget *widget, GdkEventButton *event, CsvImpTransAssist *info)
 
gboolean fixed_context_menu_handler (GnumericPopupMenuElement const *element, gpointer userdata)
 
void gnc_file_csv_trans_import (void)
 The gnc_file_csv_trans_import() will let the user import the account tree or transactions to a delimited file.
 

Detailed Description

CSV Import Assistant.

Author
Copyright (c) 2012 Robert Fewell
Copyright (c) 2016 Geert Janssens

Definition in file assistant-csv-trans-import.cpp.

Macro Definition Documentation

◆ ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS

#define ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS   "assistant-csv-trans-import"

Definition at line 81 of file assistant-csv-trans-import.cpp.

◆ GNC_PREFS_GROUP

#define GNC_PREFS_GROUP   "dialogs.import.csv"

Definition at line 80 of file assistant-csv-trans-import.cpp.

◆ MIN_COL_WIDTH

#define MIN_COL_WIDTH   70

Definition at line 79 of file assistant-csv-trans-import.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Definition at line 1234 of file assistant-csv-trans-import.cpp.

1235{
1236 CONTEXT_STF_IMPORT_MERGE_LEFT = 1,
1237 CONTEXT_STF_IMPORT_MERGE_RIGHT = 2,
1238 CONTEXT_STF_IMPORT_SPLIT = 3,
1239 CONTEXT_STF_IMPORT_WIDEN = 4,
1240 CONTEXT_STF_IMPORT_NARROW = 5
1241};

◆ GncImportColumn

enum GncImportColumn

Definition at line 86 of file assistant-csv-trans-import.cpp.

86 {
87 MAPPING_STRING,
88 MAPPING_FULLPATH,
89 MAPPING_ACCOUNT
90};

◆ PreviewDataTableCols

enum PreviewDataTableCols

Definition at line 1174 of file assistant-csv-trans-import.cpp.

1174 {
1175 PREV_COL_FCOLOR,
1176 PREV_COL_BCOLOR,
1177 PREV_COL_STRIKE,
1178 PREV_COL_ERROR,
1179 PREV_COL_ERR_ICON,
1180 PREV_N_FIXED_COLS };

◆ PreviewHeaderComboCols

enum PreviewHeaderComboCols

Definition at line 1170 of file assistant-csv-trans-import.cpp.

1170{ COL_TYPE_NAME, COL_TYPE_ID };

Function Documentation

◆ csv_tximp_acct_match_button_clicked_cb()

void csv_tximp_acct_match_button_clicked_cb ( GtkWidget *  widget,
CsvImpTransAssist info 
)

Definition at line 455 of file assistant-csv-trans-import.cpp.

456{
457 info->acct_match_via_button();
458}

◆ csv_tximp_acct_match_view_clicked_cb()

bool csv_tximp_acct_match_view_clicked_cb ( GtkWidget *  widget,
GdkEventButton *  event,
CsvImpTransAssist info 
)

Definition at line 460 of file assistant-csv-trans-import.cpp.

461{
462 return info->acct_match_via_view_dblclick(event);
463}

◆ csv_tximp_assist_close_cb()

void csv_tximp_assist_close_cb ( GtkAssistant *  gtkassistant,
CsvImpTransAssist info 
)

Definition at line 322 of file assistant-csv-trans-import.cpp.

323{
324 gnc_close_gui_component_by_data (ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS, info);
325}

◆ csv_tximp_assist_finish_cb()

void csv_tximp_assist_finish_cb ( GtkAssistant *  gtkassistant,
CsvImpTransAssist info 
)

Definition at line 328 of file assistant-csv-trans-import.cpp.

329{
330 info->assist_finish ();
331}

◆ csv_tximp_assist_prepare_cb()

void csv_tximp_assist_prepare_cb ( GtkAssistant *  assistant,
GtkWidget *  page,
CsvImpTransAssist info 
)

Definition at line 315 of file assistant-csv-trans-import.cpp.

317{
318 info->assist_prepare_cb(page);
319}

◆ csv_tximp_file_activated_cb()

void csv_tximp_file_activated_cb ( GtkFileChooser *  chooser,
CsvImpTransAssist info 
)

Definition at line 333 of file assistant-csv-trans-import.cpp.

334{
335 info->file_activated_cb();
336}

◆ csv_tximp_file_selection_changed_cb()

void csv_tximp_file_selection_changed_cb ( GtkFileChooser *  chooser,
CsvImpTransAssist info 
)

Definition at line 338 of file assistant-csv-trans-import.cpp.

339{
340 info->file_selection_changed_cb();
341}

◆ csv_tximp_preview_acct_sel_cb()

void csv_tximp_preview_acct_sel_cb ( GtkWidget *  widget,
CsvImpTransAssist info 
)

Definition at line 420 of file assistant-csv-trans-import.cpp.

421{
422 info->preview_update_account();
423}

◆ csv_tximp_preview_del_settings_cb()

void csv_tximp_preview_del_settings_cb ( GtkWidget *  button,
CsvImpTransAssist info 
)

Definition at line 343 of file assistant-csv-trans-import.cpp.

344{
345 info->preview_settings_delete();
346}

◆ csv_tximp_preview_enc_sel_cb()

void csv_tximp_preview_enc_sel_cb ( GOCharmapSel *  selector,
const char *  encoding,
CsvImpTransAssist info 
)

Definition at line 425 of file assistant-csv-trans-import.cpp.

427{
428 info->preview_update_encoding(encoding);
429}

◆ csv_tximp_preview_erow_cb()

void csv_tximp_preview_erow_cb ( GtkSpinButton *  spin,
CsvImpTransAssist info 
)

Definition at line 390 of file assistant-csv-trans-import.cpp.

391{
392 info->preview_update_skipped_rows();
393}

◆ csv_tximp_preview_multisplit_cb()

void csv_tximp_preview_multisplit_cb ( GtkToggleButton *  checkbox,
CsvImpTransAssist info 
)

Definition at line 405 of file assistant-csv-trans-import.cpp.

406{
407 info->preview_multi_split (gtk_toggle_button_get_active (checkbox));
408}

◆ csv_tximp_preview_save_settings_cb()

void csv_tximp_preview_save_settings_cb ( GtkWidget *  button,
CsvImpTransAssist info 
)

Definition at line 348 of file assistant-csv-trans-import.cpp.

349{
350 info->preview_settings_save();
351}

◆ csv_tximp_preview_sep_button_cb()

void csv_tximp_preview_sep_button_cb ( GtkWidget *  widget,
CsvImpTransAssist info 
)

Definition at line 410 of file assistant-csv-trans-import.cpp.

411{
412 info->preview_update_separators(widget);
413}

◆ csv_tximp_preview_sep_fixed_sel_cb()

void csv_tximp_preview_sep_fixed_sel_cb ( GtkToggleButton *  csv_button,
CsvImpTransAssist info 
)

Definition at line 415 of file assistant-csv-trans-import.cpp.

416{
417 info->preview_update_file_format();
418}

◆ csv_tximp_preview_settings_sel_changed_cb()

void csv_tximp_preview_settings_sel_changed_cb ( GtkComboBox *  combo,
CsvImpTransAssist info 
)

Definition at line 353 of file assistant-csv-trans-import.cpp.

354{
355 info->preview_settings_load();
356}

◆ csv_tximp_preview_settings_text_changed_cb()

void csv_tximp_preview_settings_text_changed_cb ( GtkEntry *  entry,
CsvImpTransAssist info 
)

Definition at line 380 of file assistant-csv-trans-import.cpp.

381{
382 info->preview_settings_name(entry);
383}

◆ csv_tximp_preview_settings_text_inserted_cb()

void csv_tximp_preview_settings_text_inserted_cb ( GtkEditable *  entry,
gchar *  new_text,
gint  new_text_length,
gint *  position,
CsvImpTransAssist info 
)

Definition at line 359 of file assistant-csv-trans-import.cpp.

361{
362 if (!new_text)
363 return;
364
365 /* Prevent entering [], which are invalid characters in key files */
366 auto base_txt = std::string (new_text);
367 auto mod_txt = base_txt;
368 std::replace (mod_txt.begin(), mod_txt.end(), '[', '(');
369 std::replace (mod_txt.begin(), mod_txt.end(), ']', ')');
370 if (base_txt == mod_txt)
371 return;
372 g_signal_handlers_block_by_func (entry, (gpointer) csv_tximp_preview_settings_text_inserted_cb, info);
373 gtk_editable_insert_text (entry, mod_txt.c_str(), mod_txt.size() , position);
374 g_signal_handlers_unblock_by_func (entry, (gpointer) csv_tximp_preview_settings_text_inserted_cb, info);
375
376 g_signal_stop_emission_by_name (entry, "insert_text");
377}

◆ csv_tximp_preview_skiperrors_cb()

void csv_tximp_preview_skiperrors_cb ( GtkToggleButton *  checkbox,
CsvImpTransAssist info 
)

Definition at line 400 of file assistant-csv-trans-import.cpp.

401{
402 info->preview_update_skipped_rows();
403}

◆ csv_tximp_preview_skiprows_cb()

void csv_tximp_preview_skiprows_cb ( GtkToggleButton *  checkbox,
CsvImpTransAssist info 
)

Definition at line 395 of file assistant-csv-trans-import.cpp.

396{
397 info->preview_update_skipped_rows();
398}

◆ csv_tximp_preview_srow_cb()

void csv_tximp_preview_srow_cb ( GtkSpinButton *  spin,
CsvImpTransAssist info 
)

Definition at line 385 of file assistant-csv-trans-import.cpp.

386{
387 info->preview_update_skipped_rows();
388}

◆ fixed_context_menu_handler()

gboolean fixed_context_menu_handler ( GnumericPopupMenuElement const *  element,
gpointer  userdata 
)

Definition at line 1291 of file assistant-csv-trans-import.cpp.

1293{
1294 auto info = (CsvImpTransAssist*)userdata;
1295 auto fwtok = dynamic_cast<GncFwTokenizer*>(info->tx_imp->m_tokenizer.get());
1296
1297 switch (element->index)
1298 {
1299 case CONTEXT_STF_IMPORT_MERGE_LEFT:
1300 fwtok->col_delete (info->fixed_context_col - 1);
1301 break;
1302 case CONTEXT_STF_IMPORT_MERGE_RIGHT:
1303 fwtok->col_delete (info->fixed_context_col);
1304 break;
1305 case CONTEXT_STF_IMPORT_SPLIT:
1306 fwtok->col_split (info->fixed_context_col, info->fixed_context_offset);
1307 break;
1308 case CONTEXT_STF_IMPORT_WIDEN:
1309 fwtok->col_widen (info->fixed_context_col);
1310 break;
1311 case CONTEXT_STF_IMPORT_NARROW:
1312 fwtok->col_narrow (info->fixed_context_col);
1313 break;
1314 default:
1315 ; /* Nothing */
1316 }
1317
1318 try
1319 {
1320 info->tx_imp->tokenize (false);
1321 }
1322 catch(std::range_error& e)
1323 {
1324 gnc_error_dialog (GTK_WINDOW (info->csv_imp_asst), "%s", e.what());
1325 return false;
1326 }
1327 info->preview_refresh_table ();
1328 return true;
1329}

◆ gnc_file_csv_trans_import()

void gnc_file_csv_trans_import ( void  )

The gnc_file_csv_trans_import() will let the user import the account tree or transactions to a delimited file.

Definition at line 2310 of file assistant-csv-trans-import.cpp.

2311{
2312 auto info = new CsvImpTransAssist;
2313 gnc_register_gui_component (ASSISTANT_CSV_IMPORT_TRANS_CM_CLASS,
2314 nullptr, csv_tximp_close_handler,
2315 info);
2316}