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

CSV Import Assistant. More...

#include <guid.hpp>
#include "config.h"
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <stdlib.h>
#include <cstdint>
#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-price-import.h"
#include "gnc-csv-gnumeric-popup.h"
#include "go-charmap-sel.h"
#include <algorithm>
#include <exception>
#include <iostream>
#include <memory>
#include <string>
#include <tuple>
#include "gnc-imp-settings-csv-price.hpp"
#include "gnc-import-price.hpp"
#include "gnc-tokenizer-fw.hpp"
#include "gnc-tokenizer-csv.hpp"

Go to the source code of this file.

Data Structures

class  CsvImpPriceAssist
 

Macros

#define MIN_COL_WIDTH   70
 
#define GNC_PREFS_GROUP   "dialogs.import.csv"
 
#define ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS   "assistant-csv-price-import"
 

Enumerations

enum  GncCommColumn { DISPLAYED_COMM , SORT_COMM , COMM_PTR , SEP }
 
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_price_imp_assist_prepare_cb (GtkAssistant *assistant, GtkWidget *page, CsvImpPriceAssist *info)
 
void csv_price_imp_assist_close_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist *info)
 
void csv_price_imp_assist_finish_cb (GtkAssistant *gtkassistant, CsvImpPriceAssist *info)
 
void csv_price_imp_file_activated_changed_cb (GtkFileChooser *chooser, CsvImpPriceAssist *info)
 
void csv_price_imp_file_selection_changed_cb (GtkFileChooser *chooser, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_del_settings_cb (GtkWidget *button, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_save_settings_cb (GtkWidget *button, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_settings_sel_changed_cb (GtkComboBox *combo, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_settings_text_inserted_cb (GtkEditable *entry, gchar *new_text, gint new_text_length, gint *position, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_settings_text_changed_cb (GtkEntry *entry, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_srow_cb (GtkSpinButton *spin, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_erow_cb (GtkSpinButton *spin, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_skiprows_cb (GtkToggleButton *checkbox, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_skiperrors_cb (GtkToggleButton *checkbox, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_overwrite_cb (GtkToggleButton *checkbox, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_sep_button_cb (GtkWidget *widget, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_sep_fixed_sel_cb (GtkToggleButton *csv_button, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_acct_sel_cb (GtkWidget *widget, CsvImpPriceAssist *info)
 
void csv_price_imp_preview_enc_sel_cb (GOCharmapSel *selector, const char *encoding, CsvImpPriceAssist *info)
 
gboolean fixed_context_menu_handler_price (GnumericPopupMenuElement const *element, gpointer userdata)
 
void gnc_file_csv_price_import (void)
 The gnc_file_csv_price_import() will let the user import the commodity prices from a file.
 

Detailed Description

CSV Import Assistant.

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

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

Macro Definition Documentation

◆ ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS

#define ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS   "assistant-csv-price-import"

Definition at line 67 of file assistant-csv-price-import.cpp.

◆ GNC_PREFS_GROUP

#define GNC_PREFS_GROUP   "dialogs.import.csv"

Definition at line 66 of file assistant-csv-price-import.cpp.

◆ MIN_COL_WIDTH

#define MIN_COL_WIDTH   70

Definition at line 65 of file assistant-csv-price-import.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Definition at line 1304 of file assistant-csv-price-import.cpp.

1305{
1306 CONTEXT_STF_IMPORT_MERGE_LEFT = 1,
1307 CONTEXT_STF_IMPORT_MERGE_RIGHT = 2,
1308 CONTEXT_STF_IMPORT_SPLIT = 3,
1309 CONTEXT_STF_IMPORT_WIDEN = 4,
1310 CONTEXT_STF_IMPORT_NARROW = 5
1311};

◆ GncCommColumn

enum GncCommColumn

Definition at line 345 of file assistant-csv-price-import.cpp.

345{DISPLAYED_COMM, SORT_COMM, COMM_PTR, SEP};

◆ PreviewDataTableCols

enum PreviewDataTableCols

Definition at line 1206 of file assistant-csv-price-import.cpp.

1206 {
1207 PREV_COL_FCOLOR,
1208 PREV_COL_BCOLOR,
1209 PREV_COL_STRIKE,
1210 PREV_COL_ERROR,
1211 PREV_COL_ERR_ICON,
1212 PREV_N_FIXED_COLS };

◆ PreviewHeaderComboCols

enum PreviewHeaderComboCols

Definition at line 1202 of file assistant-csv-price-import.cpp.

1202{ COL_TYPE_NAME, COL_TYPE_ID };

Function Documentation

◆ csv_price_imp_assist_close_cb()

void csv_price_imp_assist_close_cb ( GtkAssistant *  gtkassistant,
CsvImpPriceAssist info 
)

Definition at line 231 of file assistant-csv-price-import.cpp.

232{
233 gnc_close_gui_component_by_data (ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS, info);
234}

◆ csv_price_imp_assist_finish_cb()

void csv_price_imp_assist_finish_cb ( GtkAssistant *  gtkassistant,
CsvImpPriceAssist info 
)

Definition at line 237 of file assistant-csv-price-import.cpp.

238{
239 info->assist_finish ();
240}

◆ csv_price_imp_assist_prepare_cb()

void csv_price_imp_assist_prepare_cb ( GtkAssistant *  assistant,
GtkWidget *  page,
CsvImpPriceAssist info 
)

Definition at line 224 of file assistant-csv-price-import.cpp.

226{
227 info->assist_prepare_cb(page);
228}

◆ csv_price_imp_file_activated_changed_cb()

void csv_price_imp_file_activated_changed_cb ( GtkFileChooser *  chooser,
CsvImpPriceAssist info 
)

Definition at line 242 of file assistant-csv-price-import.cpp.

243{
244 info->file_activated_cb();
245}

◆ csv_price_imp_file_selection_changed_cb()

void csv_price_imp_file_selection_changed_cb ( GtkFileChooser *  chooser,
CsvImpPriceAssist info 
)

Definition at line 247 of file assistant-csv-price-import.cpp.

248{
249 info->file_selection_changed_cb();
250}

◆ csv_price_imp_preview_del_settings_cb()

void csv_price_imp_preview_del_settings_cb ( GtkWidget *  button,
CsvImpPriceAssist info 
)

Definition at line 252 of file assistant-csv-price-import.cpp.

253{
254 info->preview_settings_delete();
255}

◆ csv_price_imp_preview_enc_sel_cb()

void csv_price_imp_preview_enc_sel_cb ( GOCharmapSel *  selector,
const char *  encoding,
CsvImpPriceAssist info 
)

Definition at line 329 of file assistant-csv-price-import.cpp.

331{
332 info->preview_update_encoding(encoding);
333}

◆ csv_price_imp_preview_erow_cb()

void csv_price_imp_preview_erow_cb ( GtkSpinButton *  spin,
CsvImpPriceAssist info 
)

Definition at line 299 of file assistant-csv-price-import.cpp.

300{
301 info->preview_update_skipped_rows();
302}

◆ csv_price_imp_preview_overwrite_cb()

void csv_price_imp_preview_overwrite_cb ( GtkToggleButton *  checkbox,
CsvImpPriceAssist info 
)

Definition at line 314 of file assistant-csv-price-import.cpp.

315{
316 info->preview_over_write (gtk_toggle_button_get_active (checkbox));
317}

◆ csv_price_imp_preview_save_settings_cb()

void csv_price_imp_preview_save_settings_cb ( GtkWidget *  button,
CsvImpPriceAssist info 
)

Definition at line 257 of file assistant-csv-price-import.cpp.

258{
259 info->preview_settings_save();
260}

◆ csv_price_imp_preview_sep_button_cb()

void csv_price_imp_preview_sep_button_cb ( GtkWidget *  widget,
CsvImpPriceAssist info 
)

Definition at line 319 of file assistant-csv-price-import.cpp.

320{
321 info->preview_update_separators(widget);
322}

◆ csv_price_imp_preview_sep_fixed_sel_cb()

void csv_price_imp_preview_sep_fixed_sel_cb ( GtkToggleButton *  csv_button,
CsvImpPriceAssist info 
)

Definition at line 324 of file assistant-csv-price-import.cpp.

325{
326 info->preview_update_file_format();
327}

◆ csv_price_imp_preview_settings_sel_changed_cb()

void csv_price_imp_preview_settings_sel_changed_cb ( GtkComboBox *  combo,
CsvImpPriceAssist info 
)

Definition at line 262 of file assistant-csv-price-import.cpp.

263{
264 info->preview_settings_load();
265}

◆ csv_price_imp_preview_settings_text_changed_cb()

void csv_price_imp_preview_settings_text_changed_cb ( GtkEntry *  entry,
CsvImpPriceAssist info 
)

Definition at line 289 of file assistant-csv-price-import.cpp.

290{
291 info->preview_settings_name(entry);
292}

◆ csv_price_imp_preview_settings_text_inserted_cb()

void csv_price_imp_preview_settings_text_inserted_cb ( GtkEditable *  entry,
gchar *  new_text,
gint  new_text_length,
gint *  position,
CsvImpPriceAssist info 
)

Definition at line 268 of file assistant-csv-price-import.cpp.

270{
271 if (!new_text)
272 return;
273
274 /* Prevent entering [], which are invalid characters in key files */
275 auto base_txt = std::string (new_text);
276 auto mod_txt = base_txt;
277 std::replace (mod_txt.begin(), mod_txt.end(), '[', '(');
278 std::replace (mod_txt.begin(), mod_txt.end(), ']', ')');
279 if (base_txt == mod_txt)
280 return;
281 g_signal_handlers_block_by_func (entry, (gpointer) csv_price_imp_preview_settings_text_inserted_cb, info);
282 gtk_editable_insert_text (entry, mod_txt.c_str(), mod_txt.size() , position);
283 g_signal_handlers_unblock_by_func (entry, (gpointer) csv_price_imp_preview_settings_text_inserted_cb, info);
284
285 g_signal_stop_emission_by_name (entry, "insert_text");
286}

◆ csv_price_imp_preview_skiperrors_cb()

void csv_price_imp_preview_skiperrors_cb ( GtkToggleButton *  checkbox,
CsvImpPriceAssist info 
)

Definition at line 309 of file assistant-csv-price-import.cpp.

310{
311 info->preview_update_skipped_rows();
312}

◆ csv_price_imp_preview_skiprows_cb()

void csv_price_imp_preview_skiprows_cb ( GtkToggleButton *  checkbox,
CsvImpPriceAssist info 
)

Definition at line 304 of file assistant-csv-price-import.cpp.

305{
306 info->preview_update_skipped_rows();
307}

◆ csv_price_imp_preview_srow_cb()

void csv_price_imp_preview_srow_cb ( GtkSpinButton *  spin,
CsvImpPriceAssist info 
)

Definition at line 294 of file assistant-csv-price-import.cpp.

295{
296 info->preview_update_skipped_rows();
297}

◆ fixed_context_menu_handler_price()

gboolean fixed_context_menu_handler_price ( GnumericPopupMenuElement const *  element,
gpointer  userdata 
)

Definition at line 1361 of file assistant-csv-price-import.cpp.

1363{
1364 auto info = (CsvImpPriceAssist*)userdata;
1365 auto fwtok = dynamic_cast<GncFwTokenizer*>(info->price_imp->m_tokenizer.get());
1366
1367 switch (element->index)
1368 {
1369 case CONTEXT_STF_IMPORT_MERGE_LEFT:
1370 fwtok->col_delete (info->fixed_context_col - 1);
1371 break;
1372 case CONTEXT_STF_IMPORT_MERGE_RIGHT:
1373 fwtok->col_delete (info->fixed_context_col);
1374 break;
1375 case CONTEXT_STF_IMPORT_SPLIT:
1376 fwtok->col_split (info->fixed_context_col, info->fixed_context_offset);
1377 break;
1378 case CONTEXT_STF_IMPORT_WIDEN:
1379 fwtok->col_widen (info->fixed_context_col);
1380 break;
1381 case CONTEXT_STF_IMPORT_NARROW:
1382 fwtok->col_narrow (info->fixed_context_col);
1383 break;
1384 default:
1385 ; /* Nothing */
1386 }
1387
1388 try
1389 {
1390 info->price_imp->tokenize (false);
1391 }
1392 catch(std::range_error& e)
1393 {
1394 gnc_error_dialog (GTK_WINDOW (info->csv_imp_asst), "%s", e.what());
1395 return false;
1396 }
1397 info->preview_refresh_table ();
1398 return true;
1399}

◆ gnc_file_csv_price_import()

void gnc_file_csv_price_import ( void  )

The gnc_file_csv_price_import() will let the user import the commodity prices from a file.

Definition at line 2027 of file assistant-csv-price-import.cpp.

2028{
2029 auto info = new CsvImpPriceAssist;
2030 gnc_register_gui_component (ASSISTANT_CSV_IMPORT_PRICE_CM_CLASS,
2031 nullptr, csv_price_imp_close_handler,
2032 info);
2033}