29 #include <glib/gi18n.h>
30 #include <glib/gstdio.h>
37 #include "dialog-account-picker.h"
40 #include "dialog-utils.h"
42 #include "assistant-qif-import.h"
43 #include "assistant-utils.h"
44 #include "gnc-component-manager.h"
47 #include "gnc-gui-query.h"
48 #include "gnc-guile-utils.h"
56 #include "guile-mappings.h"
58 #include "swig-runtime.h"
60 #define ASSISTANT_QIF_IMPORT_CM_CLASS "assistant-qif-import"
61 #define GNC_PREFS_GROUP "dialogs.import.qif"
62 #define GNC_PREF_SHOW_DOC "show-doc"
63 #define GNC_PREF_DEFAULT_TRANS_STATUS_CLEARED "default-status-cleared"
64 #define GNC_PREF_DEFAULT_TRANS_STATUS_NOTCLEARED "default-status-notcleared"
65 #define GNC_PREF_DEFAULT_TRANS_STATUS_RECONCILED "default-status-reconciled"
67 #define PREV_ROW "prev_row"
73 FILENAME_COL_INDEX = 0,
80 ACCOUNT_COL_INDEX = 0,
84 ACCOUNT_COL_ELLIPSIZE,
90 QIF_TRANS_COL_INDEX = 0,
92 QIF_TRANS_COL_DESCRIPTION,
94 QIF_TRANS_COL_CHECKED,
101 GtkWidget * assistant;
104 GtkWidget * filename_entry;
107 GtkWidget * load_pause;
108 GtkWidget * load_start;
109 GtkWidget * load_log;
113 GtkWidget * acct_entry;
116 GtkWidget * date_format_combo;
119 GtkWidget * selected_file_view;
120 GtkWidget * unload_file_btn;
123 GtkWidget * acct_view;
124 GtkWidget * acct_view_count;
125 GtkWidget * acct_view_btn;
128 GtkWidget * cat_view;
129 GtkWidget * cat_view_count;
130 GtkWidget * cat_view_btn;
133 GtkWidget * memo_view;
134 GtkWidget * memo_view_count;
135 GtkWidget * memo_view_btn;
138 GtkWidget * currency_picker;
139 GtkWidget * book_option_label;
140 GtkWidget * book_option_message;
146 GtkWidget * convert_pause;
147 GtkWidget * convert_start;
148 GtkWidget * convert_log;
152 GtkWidget * new_transaction_view;
153 GtkWidget * old_transaction_view;
156 GtkWidget * summary_text;
158 GList * commodity_pages;
160 gboolean show_doc_pages;
161 gboolean ask_date_format;
164 gboolean acct_tree_found;
171 SCM acct_display_info;
174 SCM cat_display_info;
177 SCM memo_display_info;
183 GList * new_namespaces;
186 SCM imported_account_tree;
187 SCM match_transactions;
188 SCM transaction_status;
189 int selected_transaction;
195 GtkWidget *namespace_combo;
196 GtkWidget *name_entry;
197 GtkWidget *mnemonic_entry;
204 static void gnc_ui_qif_import_assistant_destroy (GtkObject *
object, gpointer user_data);
205 static void gnc_ui_qif_import_assistant_close_handler (gpointer user_data );
207 void gnc_ui_qif_import_cancel_cb (GtkAssistant *gtkassistant, gpointer user_data);
208 void gnc_ui_qif_import_prepare_cb (GtkAssistant *assistant, GtkWidget *page, gpointer user_data);
209 void gnc_ui_qif_import_finish_cb (GtkAssistant *gtkassistant, gpointer user_data);
210 void gnc_ui_qif_import_close_cb (GtkAssistant *gtkassistant, gpointer user_data);
212 void gnc_ui_qif_import_intro_prepare (GtkAssistant *assistant, gpointer user_data);
214 void gnc_ui_qif_import_load_file_prepare (GtkAssistant *assistant, gpointer user_data);
215 void gnc_ui_qif_import_select_file_cb (GtkButton *button, gpointer user_data);
217 void gnc_ui_qif_import_load_progress_prepare (GtkAssistant *assistant, gpointer user_data);
218 void gnc_ui_qif_import_load_progress_pause_cb (GtkButton *button, gpointer user_data);
219 void gnc_ui_qif_import_load_progress_start_cb (GtkButton * button, gpointer user_data);
221 void gnc_ui_qif_import_date_format_prepare (GtkAssistant *assistant, gpointer user_data);
222 void gnc_ui_qif_import_date_valid_cb (GtkWidget *widget, gpointer user_data);
224 void gnc_ui_qif_import_account_prepare (GtkAssistant *assistant, gpointer user_data);
225 void gnc_ui_qif_import_acct_valid_cb (GtkWidget *widget, gpointer user_data);
227 void gnc_ui_qif_import_loaded_files_prepare (GtkAssistant *assistant, gpointer user_data);
228 void gnc_ui_qif_import_load_another_cb (GtkButton *button, gpointer user_data);
229 void gnc_ui_qif_import_unload_file_cb (GtkButton *button, gpointer user_data);
233 void gnc_ui_qif_import_account_match_prepare (GtkAssistant *assistant, gpointer user_data);
234 void gnc_ui_qif_import_account_doc_prepare (GtkAssistant *assistant, gpointer user_data);
235 void gnc_ui_qif_import_account_rematch_cb (GtkButton *button, gpointer user_data);
237 void gnc_ui_qif_import_catagory_match_prepare (GtkAssistant *assistant, gpointer user_data);
238 void gnc_ui_qif_import_catagory_doc_prepare (GtkAssistant *assistant, gpointer user_data);
239 void gnc_ui_qif_import_category_rematch_cb (GtkButton *button, gpointer user_data);
241 void gnc_ui_qif_import_memo_match_prepare (GtkAssistant *assistant, gpointer user_data);
242 void gnc_ui_qif_import_memo_doc_prepare (GtkAssistant *assistant, gpointer user_data);
243 void gnc_ui_qif_import_memo_rematch_cb (GtkButton *button, gpointer user_data);
245 void gnc_ui_qif_import_currency_prepare (GtkAssistant *assistant, gpointer user_data);
247 void gnc_ui_qif_import_commodity_new_prepare (GtkAssistant *assistant, gpointer user_data);
248 void gnc_ui_qif_import_commodity_doc_prepare (GtkAssistant *assistant, gpointer user_data);
249 void gnc_ui_qif_import_comm_changed_cb (GtkWidget *widget, gpointer user_data);
251 void gnc_ui_qif_import_convert_progress_prepare (GtkAssistant *assistant, gpointer user_data);
252 void gnc_ui_qif_import_convert_progress_pause_cb (GtkButton * button, gpointer user_data);
253 void gnc_ui_qif_import_convert_progress_start_cb(GtkButton * button, gpointer user_data);
255 void gnc_ui_qif_import_duplicates_match_prepare (GtkAssistant *assistant, gpointer user_data);
256 void gnc_ui_qif_import_duplicates_doc_prepare (GtkAssistant *assistant, gpointer user_data);
258 void gnc_ui_qif_import_end_page_prepare (GtkAssistant *assistant, gpointer user_data);
260 void gnc_ui_qif_import_summary_page_prepare (GtkAssistant *assistant, gpointer user_data);
274 GtkWidget *view, SCM map_info, SCM * display_info)
277 SCM get_qif_name = scm_c_eval_string(
"qif-map-entry:qif-name");
278 SCM get_gnc_name = scm_c_eval_string(
"qif-map-entry:gnc-name");
279 SCM get_new = scm_c_eval_string(
"qif-map-entry:new-acct?");
281 gchar *qif_name = NULL;
282 gchar *gnc_name = NULL;
289 GtkTreeSelection *selection;
291 store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(view)));
294 accts_left = scm_call_3(make_display,
295 wind->imported_files,
297 wind->gnc_acct_info);
299 scm_gc_unprotect_object(*display_info);
300 *display_info = accts_left;
301 scm_gc_protect_object(*display_info);
304 gtk_list_store_clear(store);
306 while (!scm_is_null(accts_left))
308 qif_name = gnc_scm_call_1_to_string(get_qif_name, SCM_CAR(accts_left));
309 gnc_name = gnc_scm_call_1_to_string(get_gnc_name, SCM_CAR(accts_left));
310 checked = (scm_call_1(get_new, SCM_CAR(accts_left)) == SCM_BOOL_T);
312 gtk_list_store_append(store, &iter);
313 gtk_list_store_set(store, &iter,
314 ACCOUNT_COL_INDEX, row++,
315 ACCOUNT_COL_QIF_NAME, qif_name,
316 ACCOUNT_COL_GNC_NAME, gnc_name,
317 ACCOUNT_COL_NEW, checked,
318 ACCOUNT_COL_ELLIPSIZE, PANGO_ELLIPSIZE_START,
320 accts_left = SCM_CDR(accts_left);
326 prev_row = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(store), PREV_ROW));
329 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
330 path = gtk_tree_path_new_from_indices(prev_row, -1);
331 gtk_tree_selection_select_path(selection, path);
332 gtk_tree_path_free(path);
336 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
337 path = gtk_tree_path_new_from_indices( 0, -1);
338 gtk_tree_selection_select_path(selection, path);
339 gtk_tree_path_free(path);
353 SCM make_account_display = scm_c_eval_string(
"qif-dialog:make-account-display");
355 update_account_picker_page(wind, make_account_display, wind->acct_view,
356 wind->acct_map_info, &(wind->acct_display_info));
368 SCM make_category_display = scm_c_eval_string(
"qif-dialog:make-category-display");
370 update_account_picker_page(wind, make_category_display, wind->cat_view,
371 wind->cat_map_info, &(wind->cat_display_info));
383 SCM make_memo_display = scm_c_eval_string(
"qif-dialog:make-memo-display");
385 update_account_picker_page(wind, make_memo_display, wind->memo_view,
386 wind->memo_map_info, &(wind->memo_display_info));
402 for (pageptr = wind->commodity_pages; pageptr; pageptr = pageptr->next)
404 gtkpage = pageptr->data;
405 page = g_object_get_data(G_OBJECT(gtkpage),
"page_struct");
408 scm_gc_unprotect_object(page->hash_key);
415 g_list_free(wind->commodity_pages);
416 wind->commodity_pages = NULL;
425 gnc_ui_qif_import_assistant_destroy(GtkObject *
object, gpointer user_data)
433 gnc_ui_qif_import_commodity_destroy(wind);
435 gnc_unregister_gui_component_by_data(ASSISTANT_QIF_IMPORT_CM_CLASS, wind);
437 gtk_widget_destroy(wind->window);
439 scm_gc_unprotect_object(wind->imported_files);
440 scm_gc_unprotect_object(wind->selected_file);
441 scm_gc_unprotect_object(wind->gnc_acct_info);
442 scm_gc_unprotect_object(wind->cat_display_info);
443 scm_gc_unprotect_object(wind->cat_map_info);
444 scm_gc_unprotect_object(wind->memo_display_info);
445 scm_gc_unprotect_object(wind->memo_map_info);
446 scm_gc_unprotect_object(wind->acct_display_info);
447 scm_gc_unprotect_object(wind->acct_map_info);
448 scm_gc_unprotect_object(wind->security_hash);
449 scm_gc_unprotect_object(wind->security_prefs);
450 scm_gc_unprotect_object(wind->new_securities);
451 scm_gc_unprotect_object(wind->ticker_map);
452 scm_gc_unprotect_object(wind->imported_account_tree);
453 scm_gc_unprotect_object(wind->match_transactions);
464 gnc_ui_qif_import_select_loaded_file_cb(GtkTreeSelection *selection,
473 button = (wind->unload_file_btn);
474 if (gtk_tree_selection_get_selected(selection, &model, &iter))
476 gtk_tree_model_get(model, &iter, FILENAME_COL_INDEX, &row, -1);
477 if (scm_is_list(wind->imported_files) &&
478 (scm_ilength(wind->imported_files) > row))
480 scm_gc_unprotect_object(wind->selected_file);
481 wind->selected_file = scm_list_ref(wind->imported_files,
483 scm_gc_protect_object(wind->selected_file);
484 g_object_set(button,
"sensitive", TRUE, (gchar*)NULL);
489 scm_gc_unprotect_object(wind->selected_file);
490 wind->selected_file = SCM_BOOL_F;
491 scm_gc_protect_object(wind->selected_file);
492 g_object_set(button,
"sensitive", FALSE, (gchar*)NULL);
501 create_account_picker_view(GtkWidget *widget,
502 const gchar *col_name,
503 GCallback activate_cb,
507 GtkTreeView *view = GTK_TREE_VIEW(widget);
508 GtkTreeSelection *selection = gtk_tree_view_get_selection(view);
510 GtkCellRenderer *renderer;
511 GtkTreeViewColumn *column;
513 store = gtk_list_store_new(NUM_ACCOUNT_COLS, G_TYPE_INT, G_TYPE_STRING,
514 G_TYPE_STRING, G_TYPE_BOOLEAN,
515 PANGO_TYPE_ELLIPSIZE_MODE);
516 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
517 g_object_unref(store);
519 renderer = gtk_cell_renderer_text_new();
520 column = gtk_tree_view_column_new_with_attributes(col_name,
523 ACCOUNT_COL_QIF_NAME,
525 ACCOUNT_COL_ELLIPSIZE,
527 g_object_set(column,
"expand", TRUE, NULL);
528 gtk_tree_view_column_set_resizable(column, TRUE);
529 gtk_tree_view_append_column(view, column);
531 renderer = gtk_cell_renderer_text_new();
532 column = gtk_tree_view_column_new_with_attributes(_(
"GnuCash account name"),
535 ACCOUNT_COL_GNC_NAME,
537 ACCOUNT_COL_ELLIPSIZE,
540 g_object_set(column,
"expand", TRUE, NULL);
541 gtk_tree_view_column_set_resizable(column, TRUE);
542 gtk_tree_view_append_column(view, column);
544 renderer = gtk_cell_renderer_toggle_new();
545 g_object_set(renderer,
"activatable", FALSE, NULL);
546 column = gtk_tree_view_column_new_with_attributes(_(
"New?"),
551 gtk_tree_view_append_column(view, column);
553 g_object_set_data(G_OBJECT(store), PREV_ROW, GINT_TO_POINTER(-1));
556 g_signal_connect(view,
"row-activated", G_CALLBACK(activate_cb), user_data);
557 g_signal_connect(selection,
"changed", G_CALLBACK(select_cb), user_data);
560 gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
576 SCM display_info, SCM map_info,
579 SCM get_qif_name = scm_c_eval_string(
"qif-map-entry:qif-name");
580 SCM get_gnc_name = scm_c_eval_string(
"qif-map-entry:gnc-name");
581 SCM set_gnc_name = scm_c_eval_string(
"qif-map-entry:set-gnc-name!");
591 pathlist = gtk_tree_selection_get_selected_rows(selection, &model);
600 if (!gtk_tree_model_get_iter(model, &iter, (GtkTreePath *) pathlist->data))
602 gtk_tree_model_get(model, &iter, ACCOUNT_COL_INDEX, &row, -1);
605 g_object_set_data(G_OBJECT(model), PREV_ROW, GINT_TO_POINTER(row));
610 map_entry = scm_list_ref(display_info, scm_from_int (row));
613 if (!qif_account_picker_dialog(wind, map_entry))
615 gnc_name = scm_call_1(get_gnc_name, map_entry);
618 scm_hash_set_x(map_info, scm_call_1(get_qif_name, map_entry), map_entry);
623 for (current = pathlist->next; current; current = current->next)
626 gtk_tree_model_get_iter(model, &iter, (GtkTreePath *) current->data);
627 gtk_tree_model_get(model, &iter, ACCOUNT_COL_INDEX, &row, -1);
630 map_entry = scm_list_ref(display_info, scm_from_int (row));
631 scm_call_2(set_gnc_name, map_entry, gnc_name);
634 scm_hash_set_x(map_info, scm_call_1(get_qif_name, map_entry), map_entry);
638 g_list_foreach(pathlist, (GFunc) gtk_tree_path_free, NULL);
639 g_list_free(pathlist);
653 gnc_ui_qif_import_account_activate_cb(GtkTreeView *view, GtkTreePath *path,
654 GtkTreeViewColumn *column,
659 g_return_if_fail(wind);
661 rematch_line(wind, gtk_tree_view_get_selection(view),
662 wind->acct_display_info, wind->acct_map_info,
663 update_account_page);
675 gnc_ui_qif_import_account_select_cb(GtkTreeSelection *selection,
679 gint count = gtk_tree_selection_count_selected_rows(selection);
682 g_return_if_fail(wind);
685 if (wind->acct_view_count)
687 count_str = g_strdup_printf(
"%d", count);
688 gtk_label_set_text(GTK_LABEL(wind->acct_view_count), count_str);
693 if (wind->acct_view_btn)
696 gtk_widget_set_sensitive(wind->acct_view_btn, TRUE);
698 gtk_widget_set_sensitive(wind->acct_view_btn, FALSE);
710 gnc_ui_qif_import_category_activate_cb(GtkTreeView *view, GtkTreePath *path,
711 GtkTreeViewColumn *column,
715 GtkTreeSelection *selection;
717 g_return_if_fail(view && wind);
718 selection = gtk_tree_view_get_selection(view);
720 rematch_line(wind, selection, wind->cat_display_info, wind->cat_map_info,
721 update_category_page);
733 gnc_ui_qif_import_category_select_cb(GtkTreeSelection *selection,
737 gint count = gtk_tree_selection_count_selected_rows(selection);
740 g_return_if_fail(wind);
743 if (wind->cat_view_count)
745 count_str = g_strdup_printf(
"%d", count);
746 gtk_label_set_text(GTK_LABEL(wind->cat_view_count), count_str);
751 if (wind->cat_view_btn)
754 gtk_widget_set_sensitive(wind->cat_view_btn, TRUE);
756 gtk_widget_set_sensitive(wind->cat_view_btn, FALSE);
768 gnc_ui_qif_import_memo_activate_cb(GtkTreeView *view, GtkTreePath *path,
769 GtkTreeViewColumn *column,
773 GtkTreeSelection *selection;
775 g_return_if_fail(view && wind);
776 selection = gtk_tree_view_get_selection(view);
778 rematch_line(wind, selection, wind->memo_display_info, wind->memo_map_info,
791 gnc_ui_qif_import_memo_select_cb(GtkTreeSelection *selection,
795 gint count = gtk_tree_selection_count_selected_rows(selection);
798 g_return_if_fail(wind);
801 if (wind->memo_view_count)
803 count_str = g_strdup_printf(
"%d", count);
804 gtk_label_set_text(GTK_LABEL(wind->memo_view_count), count_str);
809 if (wind->memo_view_btn)
812 gtk_widget_set_sensitive(wind->memo_view_btn, TRUE);
814 gtk_widget_set_sensitive(wind->memo_view_btn, FALSE);
834 _(
"Enter a name or short description, such as \"Red Hat Stock\".");
835 char *mnemonic_tooltip =
836 _(
"Enter the ticker symbol or other well known abbreviation, such as"
837 " \"RHT\". If there isn't one, or you don't know it, create your own.");
838 char *namespace_tooltip =
839 _(
"Select the exchange on which the symbol is traded, or select the"
840 " type of investment (such as FUND for mutual funds.) If you don't"
841 " see your exchange or an appropriate investment type, you can"
842 " enter a new one.");
845 page = gtk_vbox_new( FALSE, 0 );
847 g_object_set_data(G_OBJECT(retval->page),
"page_struct", retval);
851 gtk_assistant_insert_page (GTK_ASSISTANT(wind->window), page, 14);
852 gtk_assistant_set_page_type(GTK_ASSISTANT(wind->window), page, GTK_ASSISTANT_PAGE_PROGRESS );
853 gtk_assistant_set_page_complete (GTK_ASSISTANT (wind->window), page, TRUE);
854 gtk_assistant_update_buttons_state (GTK_ASSISTANT (wind->window));
857 retval->commodity = comm;
858 retval->hash_key = security_hash_key;
859 scm_gc_protect_object(retval->hash_key);
863 str = str ? str :
"";
864 title = _(
"Enter information about");
865 title = g_strdup_printf(
"%s \"%s\"", title, str);
866 gtk_assistant_set_page_title(GTK_ASSISTANT(wind->window), page, title);
872 table = gtk_table_new(3, 2, FALSE);
873 gtk_table_set_row_spacings(GTK_TABLE(table), 6);
874 gtk_table_set_col_spacings(GTK_TABLE(table), 12);
877 retval->name_entry = gtk_entry_new();
878 gtk_entry_set_text(GTK_ENTRY(retval->name_entry),
880 label = gtk_label_new_with_mnemonic(_(
"_Name or description:"));
881 gtk_label_set_mnemonic_widget(GTK_LABEL(label), retval->name_entry);
882 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
884 gtk_widget_set_tooltip_text(label, name_tooltip);
885 gtk_widget_set_tooltip_text(retval->name_entry, name_tooltip);
887 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1,
888 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
889 gtk_table_attach_defaults(GTK_TABLE(table), retval->name_entry,
892 g_signal_connect (retval->name_entry,
"changed",
893 G_CALLBACK (gnc_ui_qif_import_comm_changed_cb), wind);
896 retval->mnemonic_entry = gtk_entry_new();
897 gtk_entry_set_text(GTK_ENTRY(retval->mnemonic_entry),
899 label = gtk_label_new_with_mnemonic(
900 _(
"_Ticker symbol or other abbreviation:"));
901 gtk_label_set_mnemonic_widget(GTK_LABEL(label), retval->mnemonic_entry);
902 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
904 gtk_widget_set_tooltip_text(label, mnemonic_tooltip);
905 gtk_widget_set_tooltip_text(retval->mnemonic_entry, mnemonic_tooltip);
907 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2,
908 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
909 gtk_table_attach_defaults(GTK_TABLE(table), retval->mnemonic_entry,
912 g_signal_connect (retval->mnemonic_entry,
"changed",
913 G_CALLBACK (gnc_ui_qif_import_comm_changed_cb), wind);
916 store = gtk_list_store_new (1, G_TYPE_STRING);
917 retval->namespace_combo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(store));
918 g_object_unref(store);
921 gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX(retval->namespace_combo), 0);
923 gnc_cbwe_add_completion(GTK_COMBO_BOX(retval->namespace_combo));
924 label = gtk_label_new_with_mnemonic(
925 _(
"_Exchange or abbreviation type:"));
926 gtk_label_set_mnemonic_widget(GTK_LABEL(label), retval->namespace_combo);
927 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
929 gtk_widget_set_tooltip_text(label, namespace_tooltip);
930 gtk_widget_set_tooltip_text(retval->namespace_combo, namespace_tooltip);
932 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3,
933 GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
934 gtk_table_attach_defaults(GTK_TABLE(table), retval->namespace_combo,
937 gtk_container_set_border_width(GTK_CONTAINER(page), 12);
939 gtk_box_pack_start(GTK_BOX(page), table, FALSE, FALSE, 12);
953 SCM hash_ref = scm_c_eval_string(
"hash-ref");
964 gnc_set_busy_cursor(NULL, TRUE);
965 securities = wind->new_securities;
966 current = wind->commodity_pages;
967 while (!scm_is_null(securities) && (securities != SCM_BOOL_F))
972 current = current->next;
977 comm_ptr_token = scm_call_2(hash_ref,
979 SCM_CAR(securities));
980 #define FUNC_NAME "new_security_page"
981 commodity = SWIG_MustGetPtr(comm_ptr_token,
982 SWIG_TypeQuery(
"_p_gnc_commodity"), 1, 0);
986 new_page = new_security_page(SCM_CAR(securities), commodity, wind);
989 wind->commodity_pages = g_list_append(wind->commodity_pages,
992 gtk_widget_show_all(new_page->page);
994 wind->num_new_pages = wind->num_new_pages + 1;
995 securities = SCM_CDR(securities);
997 gnc_unset_busy_cursor(NULL);
998 PINFO(
"Number of New Security pages is %d", wind->num_new_pages);
1014 const gchar *mnemonic = NULL;
1015 gchar *name_space = NULL;
1016 const gchar *fullname = NULL;
1019 for (pageptr = wind->commodity_pages; pageptr; pageptr = pageptr->next)
1021 gtkpage = pageptr->data;
1022 page = g_object_get_data(G_OBJECT(gtkpage),
"page_struct");
1025 mnemonic = gtk_entry_get_text(GTK_ENTRY(page->mnemonic_entry));
1027 fullname = gtk_entry_get_text(GTK_ENTRY(page->name_entry));
1035 tab_commodity = gnc_commodity_table_lookup(gnc_get_current_commodities(),
1036 name_space, mnemonic);
1037 if (!tab_commodity || tab_commodity == page->commodity)
1042 scm_hash_set_x(wind->security_hash,
1044 SWIG_NewPointerObj(tab_commodity,
1045 SWIG_TypeQuery(
"_p_gnc_commodity"), 0));
1061 SCM undo = scm_c_eval_string(
"qif-import:qif-to-gnc-undo");
1063 gnc_set_busy_cursor(NULL, TRUE);
1066 scm_call_1(undo, wind->imported_account_tree);
1069 scm_gc_unprotect_object(wind->imported_account_tree);
1070 wind->imported_account_tree = SCM_BOOL_F;
1071 scm_gc_protect_object(wind->imported_account_tree);
1074 scm_gc_unprotect_object(wind->match_transactions);
1075 wind->match_transactions = SCM_BOOL_F;
1076 scm_gc_protect_object(wind->match_transactions);
1078 gnc_unset_busy_cursor(NULL);
1091 SCM possible_matches;
1096 const gchar * amount_str;
1099 GtkListStore *store;
1102 view = GTK_TREE_VIEW(wind->old_transaction_view);
1103 store = GTK_LIST_STORE(gtk_tree_view_get_model(view));
1104 gtk_list_store_clear(store);
1106 if (wind->match_transactions != SCM_BOOL_F)
1108 possible_matches = SCM_CDR(scm_list_ref(wind->match_transactions,
1109 scm_from_int (wind->selected_transaction)));
1110 scm_call_2(scm_c_eval_string(
"qif-import:refresh-match-selection"),
1111 possible_matches, scm_from_int (selection));
1113 while (!scm_is_null(possible_matches))
1115 current_xtn = SCM_CAR(possible_matches);
1116 #define FUNC_NAME "xaccTransCountSplits"
1117 gnc_xtn = SWIG_MustGetPtr(SCM_CAR(current_xtn),
1118 SWIG_TypeQuery(
"_p_Transaction"), 1, 0);
1120 selected = SCM_CDR(current_xtn);
1124 amount_str = _(
"(split)");
1131 gnc_account_print_info
1135 gtk_list_store_append(store, &iter);
1138 QIF_TRANS_COL_INDEX, rownum++,
1141 QIF_TRANS_COL_AMOUNT, amount_str,
1142 QIF_TRANS_COL_CHECKED, selected != SCM_BOOL_F,
1145 possible_matches = SCM_CDR(possible_matches);
1157 gnc_ui_qif_import_duplicate_new_select_cb(GtkTreeSelection *selection,
1160 GtkTreeModel *model;
1163 if (gtk_tree_selection_get_selected(selection, &model, &iter))
1164 gtk_tree_model_get(model, &iter,
1165 QIF_TRANS_COL_INDEX, &wind->selected_transaction,
1167 refresh_old_transactions(wind, -1);
1175 reset_ignore_old_select(gboolean *ignore)
1188 gnc_ui_qif_import_duplicate_old_select_cb(GtkTreeSelection *selection,
1191 GtkTreeModel *model;
1194 static gboolean ignore_old_select = FALSE;
1198 if (!gtk_tree_selection_get_selected(selection, &model, &iter))
1200 gtk_tree_selection_unselect_all(selection);
1205 if (ignore_old_select)
1207 ignore_old_select = TRUE;
1208 g_idle_add((GSourceFunc)reset_ignore_old_select, &ignore_old_select);
1212 gtk_tree_model_get(model, &iter,
1213 QIF_TRANS_COL_INDEX, &row,
1215 refresh_old_transactions(wind, row);
1227 gnc_ui_qif_import_check_acct_tree(
GncPluginPage *page, gpointer user_data)
1229 gboolean *found = user_data;
1231 if (GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page) && found)
1249 gnc_set_busy_cursor(NULL, TRUE);
1252 gnc_ui_qif_import_convert_undo(wind);
1255 for (pageptr = wind->commodity_pages; pageptr; pageptr = pageptr->next)
1257 gtkpage = pageptr->data;
1258 page = g_object_get_data(G_OBJECT(gtkpage),
"page_struct");
1263 table = gnc_get_current_commodities();
1264 while (wind->new_namespaces)
1269 g_free(wind->new_namespaces->data);
1270 wind->new_namespaces = g_list_delete_link(wind->new_namespaces,
1271 wind->new_namespaces);
1273 gnc_unset_busy_cursor(NULL);
1276 gnc_close_gui_component_by_data(ASSISTANT_QIF_IMPORT_CM_CLASS, wind);
1287 cancel_timeout_cb(gpointer data)
1309 gnc_ui_qif_import_cancel_cb(GtkAssistant *gtkassistant, gpointer user_data)
1312 gint currentpage = gtk_assistant_get_current_page(gtkassistant);
1313 GtkWidget *mypage = gtk_assistant_get_nth_page (gtkassistant, currentpage);
1314 const char *pagename = gtk_buildable_get_name(GTK_BUILDABLE(mypage));
1316 if (!g_strcmp0 (pagename,
"summary_page"))
1320 gnc_ui_qif_import_close_cb(gtkassistant, user_data);
1322 else if (wind->busy)
1325 scm_c_eval_string(
"(qif-import:cancel)");
1328 g_timeout_add(200, cancel_timeout_cb, user_data);
1341 gnc_ui_qif_import_close_cb(GtkAssistant *gtkassistant, gpointer user_data)
1346 if (!wind->acct_tree_found)
1349 gnc_ui_file_access_for_save_as();
1352 gnc_close_gui_component_by_data( ASSISTANT_QIF_IMPORT_CM_CLASS, wind );
1364 return SCM_LIST3(w->acct_map_info,
1384 gchar tmp_transaction_status =
'n';
1386 g_return_if_fail(wind);
1389 wind->show_doc_pages =
1394 tmp_transaction_status =
'c';
1395 else if (
gnc_prefs_get_bool (GNC_PREFS_GROUP, GNC_PREF_DEFAULT_TRANS_STATUS_RECONCILED))
1396 tmp_transaction_status =
'y';
1398 wind->transaction_status = SCM_MAKE_CHAR(tmp_transaction_status);
1412 SCM create_ticker_map;
1414 g_return_if_fail(wind);
1417 wind->imported_files = SCM_EOL;
1418 wind->selected_file = SCM_BOOL_F;
1419 wind->gnc_acct_info = SCM_BOOL_F;
1420 wind->cat_display_info = SCM_BOOL_F;
1421 wind->cat_map_info = SCM_BOOL_F;
1422 wind->acct_display_info = SCM_BOOL_F;
1423 wind->acct_map_info = SCM_BOOL_F;
1424 wind->memo_display_info = SCM_BOOL_F;
1425 wind->memo_map_info = SCM_BOOL_F;
1426 wind->security_hash = SCM_BOOL_F;
1427 wind->security_prefs = SCM_BOOL_F;
1428 wind->new_securities = SCM_BOOL_F;
1429 wind->ticker_map = SCM_BOOL_F;
1430 wind->imported_account_tree = SCM_BOOL_F;
1431 wind->match_transactions = SCM_BOOL_F;
1435 load_map_prefs = scm_c_eval_string(
"qif-import:load-map-prefs");
1436 mapping_info = scm_call_0(load_map_prefs);
1437 wind->gnc_acct_info = scm_list_ref(mapping_info, scm_from_int (0));
1438 wind->acct_map_info = scm_list_ref(mapping_info, scm_from_int (1));
1439 wind->cat_map_info = scm_list_ref(mapping_info, scm_from_int (2));
1440 wind->memo_map_info = scm_list_ref(mapping_info, scm_from_int (3));
1441 wind->security_hash = scm_list_ref(mapping_info, scm_from_int (4));
1442 wind->security_prefs = scm_list_ref(mapping_info, scm_from_int (5));
1445 create_ticker_map = scm_c_eval_string(
"make-ticker-map");
1446 wind->ticker_map = scm_call_0(create_ticker_map);
1449 scm_gc_protect_object(wind->imported_files);
1450 scm_gc_protect_object(wind->selected_file);
1451 scm_gc_protect_object(wind->gnc_acct_info);
1452 scm_gc_protect_object(wind->cat_display_info);
1453 scm_gc_protect_object(wind->cat_map_info);
1454 scm_gc_protect_object(wind->memo_display_info);
1455 scm_gc_protect_object(wind->memo_map_info);
1456 scm_gc_protect_object(wind->acct_display_info);
1457 scm_gc_protect_object(wind->acct_map_info);
1458 scm_gc_protect_object(wind->security_hash);
1459 scm_gc_protect_object(wind->security_prefs);
1460 scm_gc_protect_object(wind->new_securities);
1461 scm_gc_protect_object(wind->ticker_map);
1462 scm_gc_protect_object(wind->imported_account_tree);
1463 scm_gc_protect_object(wind->match_transactions);
1477 gnc_ui_qif_import_intro_prepare (GtkAssistant *assistant, gpointer user_data)
1480 SCM unload = scm_c_eval_string(
"qif-dialog:unload-qif-file");
1484 wind->load_stop = FALSE;
1486 files_list = scm_call_2(unload, wind->selected_file, wind->imported_files);
1488 scm_gc_unprotect_object(wind->imported_files);
1489 wind->imported_files = files_list;
1490 scm_gc_protect_object(wind->imported_files);
1492 scm_gc_unprotect_object(wind->selected_file);
1493 wind->selected_file = SCM_BOOL_F;
1494 scm_gc_protect_object(wind->selected_file);
1508 gnc_ui_qif_import_load_file_complete (GtkAssistant *assistant,
1512 const gchar * path_to_load;
1515 path_to_load = gtk_entry_get_text(GTK_ENTRY(wind->filename_entry));
1518 if (strlen(path_to_load) == 0)
1519 gnc_error_dialog(wind->window,
"%s", _(
"Please select a file to load."));
1520 else if (g_access(path_to_load, R_OK) < 0)
1521 gnc_error_dialog(wind->window,
"%s",
1522 _(
"File not found or read permission denied. "
1523 "Please select another file."));
1526 SCM qif_file_loaded = scm_c_eval_string(
"qif-dialog:qif-file-loaded?");
1529 if (scm_call_2(qif_file_loaded,
1530 scm_from_locale_string(path_to_load ? path_to_load :
""),
1531 wind->imported_files) == SCM_BOOL_T)
1532 gnc_error_dialog(wind->window,
"%s",
1533 _(
"That QIF file is already loaded. "
1534 "Please select another file."));
1553 gnc_ui_qif_import_load_file_prepare (GtkAssistant *assistant, gpointer user_data)
1556 const gchar * path_to_load;
1557 gboolean page_status = FALSE;
1559 gint num = gtk_assistant_get_current_page (assistant);
1560 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
1563 path_to_load = gtk_entry_get_text(GTK_ENTRY(wind->filename_entry));
1566 if (strlen(path_to_load) != 0)
1568 page_status = gnc_ui_qif_import_load_file_complete(assistant, user_data);
1570 gtk_assistant_set_page_complete (assistant, page, page_status);
1582 gnc_ui_qif_import_select_file_cb(GtkButton * button,
1587 GtkAssistant *assistant = GTK_ASSISTANT(wind->window);
1588 gint num = gtk_assistant_get_current_page (assistant);
1589 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
1591 GtkFileFilter *filter;
1592 char * new_file_name;
1593 char *file_name, *default_dir;
1596 default_dir = gnc_get_default_directory(GNC_PREFS_GROUP);
1598 filter = gtk_file_filter_new();
1599 gtk_file_filter_set_name(filter,
"*.qif");
1600 gtk_file_filter_add_pattern(filter,
"*.[Qq][Ii][Ff]");
1601 new_file_name = gnc_file_dialog(_(
"Select QIF File"),
1602 g_list_prepend (NULL, filter),
1604 GNC_FILE_DIALOG_IMPORT);
1607 if (new_file_name == NULL)
1609 file_name = g_strdup(default_dir);
1611 else if (!g_path_is_absolute(new_file_name))
1613 file_name = g_build_filename(default_dir, new_file_name, NULL);
1614 g_free(new_file_name);
1618 file_name = new_file_name;
1620 g_free(default_dir);
1621 default_dir = g_path_get_dirname(file_name);
1622 gnc_set_default_directory(GNC_PREFS_GROUP, default_dir);
1624 g_free(default_dir);
1627 gtk_entry_set_text(GTK_ENTRY(wind->filename_entry), file_name);
1630 gtk_assistant_set_page_complete (assistant, page,
1631 gnc_ui_qif_import_load_file_complete (assistant, user_data));
1645 gnc_ui_qif_import_load_progress_pause_cb(GtkButton * button,
1649 SCM toggle_pause = scm_c_eval_string(
"qif-import:toggle-pause");
1656 progress = SWIG_NewPointerObj(wind->load_progress,
1657 SWIG_TypeQuery(
"_p__GNCProgressDialog"),
1661 scm_call_1(toggle_pause, progress);
1664 if (strcmp(gtk_button_get_label(button), _(
"_Resume")))
1666 gtk_button_set_use_stock(button, FALSE);
1667 gtk_button_set_use_underline(button, TRUE);
1668 gtk_button_set_label(button, _(
"_Resume"));
1672 gtk_button_set_use_stock(button, TRUE);
1673 gtk_button_set_use_underline(button, FALSE);
1674 gtk_button_set_label(button,
"gtk-media-pause");
1685 gnc_ui_qif_import_load_progress_start_cb(GtkButton * button,
1689 gint num = gtk_assistant_get_current_page (GTK_ASSISTANT(wind->window));
1690 GtkWidget *page = gtk_assistant_get_nth_page (GTK_ASSISTANT(wind->window), num);
1692 const gchar * path_to_load;
1694 SCM make_qif_file = scm_c_eval_string(
"make-qif-file");
1695 SCM qif_file_load = scm_c_eval_string(
"qif-file:read-file");
1696 SCM qif_file_parse = scm_c_eval_string(
"qif-file:parse-fields");
1697 SCM unload_qif_file = scm_c_eval_string(
"qif-dialog:unload-qif-file");
1698 SCM parse_results = scm_c_eval_string(
"qif-file:parse-fields-results");
1700 SCM imported_files = SCM_EOL;
1701 SCM load_return, parse_return;
1706 gtk_widget_set_sensitive(wind->load_pause, TRUE);
1709 path_to_load = gtk_entry_get_text(GTK_ENTRY(wind->filename_entry));
1712 scm_qiffile = scm_call_0(make_qif_file);
1713 scm_gc_unprotect_object(wind->selected_file);
1714 wind->selected_file = scm_qiffile;
1715 scm_gc_protect_object(wind->selected_file);
1716 imported_files = scm_cons(scm_qiffile, wind->imported_files);
1719 progress = SWIG_NewPointerObj(wind->load_progress,
1720 SWIG_TypeQuery(
"_p__GNCProgressDialog"),
1724 scm_c_eval_string(
"(qif-import:reset-cancel-pause)");
1739 load_return = scm_call_4(qif_file_load,
1740 SCM_CAR(imported_files),
1741 scm_from_locale_string(path_to_load ? path_to_load :
""),
1745 if (load_return == SCM_BOOL_T)
1750 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1756 wind->load_stop = TRUE;
1758 else if (load_return == SCM_BOOL_F || !scm_is_list(load_return))
1763 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1767 _(
"An error occurred while loading the QIF file."));
1770 gnc_error_dialog(wind->window,
"%s",
1771 _(
"An error occurred while loading the QIF file."));
1775 wind->load_stop = TRUE;
1777 else if (!scm_is_null(load_return))
1779 if (SCM_CAR(load_return) == SCM_BOOL_F)
1781 imported_files = scm_call_2(unload_qif_file, scm_qiffile, imported_files);
1782 scm_gc_unprotect_object(wind->imported_files);
1783 wind->imported_files = imported_files;
1784 scm_gc_protect_object(wind->imported_files);
1789 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1791 wind->load_stop = TRUE;
1808 parse_return = scm_call_2(qif_file_parse, SCM_CAR(imported_files), progress);
1810 wind->ask_date_format = FALSE;
1811 if (parse_return == SCM_BOOL_T)
1816 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1820 imported_files = scm_call_2(unload_qif_file, scm_qiffile, imported_files);
1826 wind->load_stop = TRUE;
1828 else if (parse_return == SCM_BOOL_F || !scm_is_list(parse_return))
1833 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1837 imported_files = scm_call_2(unload_qif_file, scm_qiffile, imported_files);
1841 _(
"A bug was detected while parsing the QIF file."));
1844 gnc_error_dialog(wind->window,
"%s",
1845 _(
"A bug was detected while parsing the QIF file."));
1849 wind->load_stop = TRUE;
1851 else if (!scm_is_null(parse_return))
1854 if (SCM_CAR(parse_return) == SCM_BOOL_T)
1861 if ((date_formats = scm_call_2(parse_results,
1862 SCM_CDR(parse_return),
1863 scm_from_locale_symbol (
"date"))) != SCM_BOOL_F)
1865 GtkComboBox *combo_box;
1866 GtkTreeModel *model;
1870 g_signal_handlers_block_by_func( wind->date_format_combo, gnc_ui_qif_import_date_valid_cb, wind );
1873 combo_box = GTK_COMBO_BOX(wind->date_format_combo);
1874 model = gtk_combo_box_get_model(combo_box);
1875 gtk_list_store_clear(GTK_LIST_STORE(model));
1877 gtk_combo_box_set_active(GTK_COMBO_BOX(wind->date_format_combo), -1);
1880 while (scm_is_list(date_formats) && !scm_is_null(date_formats))
1882 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
1883 gtk_list_store_set (GTK_LIST_STORE(model), &iter, 0, gnc_scm_symbol_to_locale_string(SCM_CAR(date_formats)), -1);
1885 date_formats = SCM_CDR(date_formats);
1889 g_signal_handlers_unblock_by_func( wind->date_format_combo, gnc_ui_qif_import_date_valid_cb, wind );
1891 wind->ask_date_format = TRUE;
1897 imported_files = scm_call_2(unload_qif_file, scm_qiffile, imported_files);
1901 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1903 wind->load_stop = TRUE;
1908 gtk_assistant_set_page_complete (GTK_ASSISTANT(wind->window), page, TRUE);
1911 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1912 gtk_widget_set_sensitive(wind->load_start, FALSE);
1914 if (wind->load_stop == FALSE)
1920 scm_gc_unprotect_object(wind->imported_files);
1921 wind->imported_files = imported_files;
1922 scm_gc_protect_object(wind->imported_files);
1924 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1928 gtk_assistant_set_current_page (GTK_ASSISTANT(wind->window), num + 1);
1939 gnc_ui_qif_import_load_progress_prepare (GtkAssistant *assistant, gpointer user_data)
1942 gint num = gtk_assistant_get_current_page (assistant);
1943 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
1948 _(
"When you press the Start Button, GnuCash will load your QIF file. If there are no errors or warnings, you will automatically proceed to the next step. Otherwise, the details will be shown below for your review."));
1954 gtk_widget_set_sensitive(wind->load_pause, FALSE);
1955 gtk_widget_set_sensitive(wind->load_start, TRUE);
1958 gtk_assistant_set_page_complete (assistant, page, FALSE);
1972 gnc_ui_qif_import_date_format_prepare (GtkAssistant *assistant, gpointer user_data)
1976 gint num = gtk_assistant_get_current_page (assistant);
1978 if (wind->ask_date_format)
1985 gtk_assistant_set_current_page (assistant, num + 1);
1996 gnc_ui_qif_import_date_valid_cb (GtkWidget *widget, gpointer user_data)
1999 GtkTreeModel *model;
2002 GtkAssistant *assistant = GTK_ASSISTANT(wind->window);
2003 gint num = gtk_assistant_get_current_page (assistant);
2004 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2006 SCM reparse_dates = scm_c_eval_string(
"qif-file:reparse-dates");
2011 model = gtk_combo_box_get_model(GTK_COMBO_BOX(wind->date_format_combo));
2012 gtk_combo_box_get_active_iter (GTK_COMBO_BOX(wind->date_format_combo), &iter);
2013 gtk_tree_model_get( model, &iter, 0, &text, -1 );
2017 g_critical(
"QIF import: BUG DETECTED in gnc_ui_qif_import_date_valid_cb. Format is NULL.");
2019 format_sym = scm_from_locale_symbol (text);
2023 scm_call_2(reparse_dates, wind->selected_file, format_sym);
2025 gtk_assistant_set_page_complete (assistant, page, TRUE);
2039 gnc_ui_qif_import_account_prepare (GtkAssistant *assistant, gpointer user_data)
2042 gint num = gtk_assistant_get_current_page (assistant);
2044 SCM check_from_acct = scm_c_eval_string(
"qif-file:check-from-acct");
2047 if (scm_call_1(check_from_acct, wind->selected_file) != SCM_BOOL_T)
2050 SCM default_acct = scm_c_eval_string(
"qif-file:path-to-accountname");
2051 gchar * default_acctname = NULL;
2053 default_acctname = gnc_scm_call_1_to_string(default_acct, wind->selected_file);
2054 gtk_entry_set_text(GTK_ENTRY(wind->acct_entry), default_acctname);
2055 g_free (default_acctname);
2060 gtk_assistant_set_current_page (assistant, num + 1);
2071 gnc_ui_qif_import_acct_valid_cb(GtkWidget * widget,
2076 GtkAssistant *assistant = GTK_ASSISTANT(wind->window);
2077 gint num = gtk_assistant_get_current_page (assistant);
2078 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2080 const gchar * acct_name = gtk_entry_get_text(GTK_ENTRY(wind->acct_entry));
2082 if (!acct_name || acct_name[0] == 0)
2085 gtk_assistant_set_page_complete (assistant, page, FALSE);
2090 gtk_assistant_set_page_complete (assistant, page, TRUE);
2105 gnc_ui_qif_import_loaded_files_prepare (GtkAssistant *assistant,
2110 gint num = gtk_assistant_get_current_page (assistant);
2111 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2113 const gchar * acct_name = gtk_entry_get_text(GTK_ENTRY(wind->acct_entry));
2114 SCM fix_default = scm_c_eval_string(
"qif-import:fix-from-acct");
2117 scm_name = scm_from_utf8_string(acct_name ? acct_name :
"");
2118 scm_call_2(fix_default, wind->selected_file, scm_name);
2121 gtk_assistant_set_page_complete (assistant, page, TRUE);
2123 update_file_page(wind);
2133 gnc_ui_qif_import_load_another_cb(GtkButton * button,
2137 GtkAssistant *assistant = GTK_ASSISTANT(wind->window);
2139 gtk_assistant_set_current_page (assistant, 1);
2149 gnc_ui_qif_import_unload_file_cb(GtkButton * button,
2154 SCM unload_qif_file = scm_c_eval_string(
"qif-dialog:unload-qif-file");
2157 if (wind->selected_file != SCM_BOOL_F)
2160 scm_call_2(unload_qif_file, wind->selected_file, wind->imported_files);
2162 scm_gc_unprotect_object(wind->imported_files);
2163 wind->imported_files = imported_files;
2164 scm_gc_protect_object(wind->imported_files);
2166 scm_gc_unprotect_object(wind->selected_file);
2167 wind->selected_file = SCM_BOOL_F;
2168 scm_gc_protect_object(wind->selected_file);
2170 update_file_page(wind);
2183 SCM loaded_file_list = wind->imported_files;
2187 GtkListStore *store;
2190 GtkTreeRowReference *reference = NULL;
2193 view = GTK_TREE_VIEW(wind->selected_file_view);
2194 store = GTK_LIST_STORE(gtk_tree_view_get_model(view));
2195 gtk_list_store_clear(store);
2196 qif_file_path = scm_c_eval_string(
"qif-file:path");
2198 while (!scm_is_null(loaded_file_list))
2200 gchar *row_text = NULL;
2201 SCM scm_qiffile = SCM_BOOL_F;
2203 scm_qiffile = SCM_CAR(loaded_file_list);
2204 row_text = gnc_scm_call_1_to_string(qif_file_path, scm_qiffile);
2206 gtk_list_store_append(store, &iter);
2207 gtk_list_store_set(store, &iter,
2208 FILENAME_COL_INDEX, row++,
2209 FILENAME_COL_NAME, row_text,
2213 if (scm_qiffile == wind->selected_file)
2215 path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
2216 reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(store), path);
2217 gtk_tree_path_free(path);
2219 loaded_file_list = SCM_CDR(loaded_file_list);
2224 GtkTreeSelection* selection = gtk_tree_view_get_selection(view);
2225 path = gtk_tree_row_reference_get_path(reference);
2228 gtk_tree_selection_select_path(selection, path);
2229 gtk_tree_path_free(path);
2231 gtk_tree_row_reference_free(reference);
2244 gnc_ui_qif_import_account_doc_prepare (GtkAssistant *assistant,
2248 gint num = gtk_assistant_get_current_page (assistant);
2249 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2250 gint total = gtk_assistant_get_n_pages (assistant);
2251 gtk_assistant_update_buttons_state (assistant);
2253 PINFO(
"Total Number of Assistant Pages is %d", gtk_assistant_get_n_pages (assistant));
2256 gtk_assistant_set_page_complete (assistant, page, TRUE);
2259 if (wind->load_stop)
2260 gtk_assistant_set_current_page (assistant, total - 1 );
2263 if (!wind->show_doc_pages)
2264 gtk_assistant_set_current_page (assistant, num + 1 );
2278 gnc_ui_qif_import_account_match_prepare(GtkAssistant *assistant,
2282 gint num = gtk_assistant_get_current_page (assistant);
2283 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2286 gnc_set_busy_cursor(NULL, TRUE);
2287 update_account_page(wind);
2288 update_category_page(wind);
2289 update_memo_page(wind);
2290 gnc_unset_busy_cursor(NULL);
2293 gtk_assistant_set_page_complete (assistant, page, TRUE);
2305 gnc_ui_qif_import_account_rematch_cb(GtkButton *button, gpointer user_data)
2309 g_return_if_fail(wind);
2312 gtk_tree_view_get_selection(GTK_TREE_VIEW(wind->acct_view)),
2313 wind->acct_display_info,
2314 wind->acct_map_info,
2315 update_account_page);
2327 gnc_ui_qif_import_catagory_doc_prepare (GtkAssistant *assistant,
2331 gint num = gtk_assistant_get_current_page (assistant);
2332 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2333 gint total = gtk_assistant_get_n_pages (assistant);
2334 gtk_assistant_update_buttons_state (assistant);
2336 PINFO(
"Total Number of Assistant Pages is %d", gtk_assistant_get_n_pages (assistant));
2339 gtk_assistant_set_page_complete (assistant, page, TRUE);
2342 if (wind->load_stop)
2343 gtk_assistant_set_current_page (assistant, total - 1 );
2346 if (!wind->show_doc_pages)
2347 gtk_assistant_set_current_page (assistant, num + 1 );
2350 if (scm_is_list(wind->cat_display_info) && scm_is_null(wind->cat_display_info))
2351 gtk_assistant_set_current_page (assistant, num + 1);
2366 gnc_ui_qif_import_catagory_match_prepare(GtkAssistant *assistant,
2370 gint num = gtk_assistant_get_current_page (assistant);
2371 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2374 gtk_assistant_set_page_complete (assistant, page, TRUE);
2377 if (scm_is_list(wind->cat_display_info) && scm_is_null(wind->cat_display_info))
2378 gtk_assistant_set_current_page (assistant, num + 1);
2390 gnc_ui_qif_import_category_rematch_cb(GtkButton *button, gpointer user_data)
2394 g_return_if_fail(wind);
2397 gtk_tree_view_get_selection(GTK_TREE_VIEW(wind->cat_view)),
2398 wind->cat_display_info,
2400 update_category_page);
2412 gnc_ui_qif_import_memo_doc_prepare (GtkAssistant *assistant,
2416 gint num = gtk_assistant_get_current_page (assistant);
2417 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2418 gint total = gtk_assistant_get_n_pages (assistant);
2419 gtk_assistant_update_buttons_state (assistant);
2421 PINFO(
"Total Number of Assistant Pages is %d", gtk_assistant_get_n_pages (assistant));
2424 gtk_assistant_set_page_complete (assistant, page, TRUE);
2427 if (wind->load_stop)
2428 gtk_assistant_set_current_page (assistant, total - 1 );
2431 if (!wind->show_doc_pages)
2432 gtk_assistant_set_current_page (assistant, num + 1 );
2435 if (scm_is_list(wind->memo_display_info) && scm_is_null(wind->memo_display_info))
2436 gtk_assistant_set_current_page (assistant, num + 1);
2451 gnc_ui_qif_import_memo_match_prepare (GtkAssistant *assistant,
2455 gint num = gtk_assistant_get_current_page (assistant);
2456 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2459 gtk_assistant_set_page_complete (assistant, page, TRUE);
2462 if (scm_is_list(wind->memo_display_info) && scm_is_null(wind->memo_display_info))
2463 gtk_assistant_set_current_page (assistant, num + 1);
2475 gnc_ui_qif_import_memo_rematch_cb(GtkButton *button, gpointer user_data)
2479 g_return_if_fail(wind);
2482 gtk_tree_view_get_selection(GTK_TREE_VIEW(wind->memo_view)),
2483 wind->memo_display_info,
2484 wind->memo_map_info,
2500 gnc_ui_qif_import_currency_prepare(GtkAssistant *assistant,
2503 gint num = gtk_assistant_get_current_page (assistant);
2504 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2507 g_return_if_fail(wind);
2512 gtk_assistant_set_page_title (assistant, page,
2513 _(
"Choose the QIF file currency and select Book Options"));
2514 gtk_widget_show (wind->book_option_label);
2515 gtk_widget_show (wind->book_option_message);
2519 gtk_assistant_set_page_title (assistant, page,
2520 _(
"Choose the QIF file currency"));
2521 gtk_widget_hide (wind->book_option_label);
2522 gtk_widget_hide (wind->book_option_message);
2526 gtk_assistant_set_page_complete (assistant, page, TRUE);
2546 SCM update_securities = scm_c_eval_string(
"qif-import:update-security-hash");
2549 updates = scm_call_4(update_securities,
2550 wind->security_hash,
2552 wind->acct_map_info,
2553 wind->security_prefs);
2554 if (updates != SCM_BOOL_F)
2557 scm_gc_unprotect_object(wind->new_securities);
2558 if (wind->new_securities != SCM_BOOL_F)
2560 wind->new_securities = scm_append(scm_list_2(wind->new_securities,
2563 wind->new_securities = updates;
2564 scm_gc_protect_object(wind->new_securities);
2569 if (wind->new_securities != SCM_BOOL_F)
2580 gnc_ui_qif_import_commodity_doc_prepare (GtkAssistant *assistant,
2584 gint num = gtk_assistant_get_current_page (assistant);
2585 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2586 gint total = gtk_assistant_get_n_pages (assistant);
2587 gtk_assistant_update_buttons_state (assistant);
2589 PINFO(
"Total Number of Assistant Pages is %d", gtk_assistant_get_n_pages (assistant));
2592 gtk_assistant_set_page_complete (assistant, page, TRUE);
2595 if (wind->load_stop)
2596 gtk_assistant_set_current_page (assistant, total - 1 );
2599 if (gnc_ui_qif_import_new_securities(wind))
2600 prepare_security_pages(wind);
2603 gtk_assistant_set_current_page (assistant, num + 1 );
2606 if (!wind->show_doc_pages)
2607 gtk_assistant_set_current_page (assistant, num + 1 );
2619 gnc_ui_qif_import_commodity_new_prepare (GtkAssistant *assistant,
2622 gint num = gtk_assistant_get_current_page (assistant);
2623 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2625 QIFAssistantPage *qpage = g_object_get_data(G_OBJECT(page),
"page_struct");
2628 g_return_if_fail (qpage != NULL);
2631 ns = gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( GTK_COMBO_BOX(qpage->namespace_combo)))));
2636 qpage->namespace_combo,
2648 gnc_ui_qif_import_comm_valid (GtkAssistant *assistant,
2652 gint num = gtk_assistant_get_current_page (GTK_ASSISTANT(wind->window));
2653 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2654 QIFAssistantPage *qpage = g_object_get_data(G_OBJECT(page),
"page_struct");
2661 const gchar *name = gtk_entry_get_text(GTK_ENTRY(qpage->name_entry));
2662 const gchar *mnemonic = gtk_entry_get_text(GTK_ENTRY(qpage->mnemonic_entry));
2664 if (!name || (name[0] == 0))
2666 gnc_warning_dialog(wind->window,
"%s",
2667 _(
"Enter a name or short description, such as \"Red Hat Stock\"."));
2671 else if (!mnemonic || (mnemonic[0] == 0))
2673 gnc_warning_dialog(wind->window,
"%s",
2674 _(
"Enter the ticker symbol or other well known abbreviation, such as"
2675 " \"RHT\". If there isn't one, or you don't know it, create your own."));
2679 else if (!name_space || (name_space[0] == 0))
2681 gnc_warning_dialog(wind->window,
"%s",
2682 _(
"Select the exchange on which the symbol is traded, or select the"
2683 " type of investment (such as FUND for mutual funds.) If you don't"
2684 " see your exchange or an appropriate investment type, you can"
2685 " enter a new one."));
2696 book = gnc_get_current_book();
2699 !gnc_commodity_table_lookup(table, name_space, mnemonic))
2701 gnc_warning_dialog(wind->window,
"%s",
2702 _(
"You must enter an existing national "
2703 "currency or enter a different type."));
2717 wind->new_namespaces = g_list_prepend(wind->new_namespaces, name_space);
2720 g_warning(
"QIF import: Couldn't create namespace %s", name_space);
2735 gnc_ui_qif_import_comm_changed_cb (GtkWidget *widget, gpointer user_data)
2738 GtkAssistant *assistant = GTK_ASSISTANT(wind->window);
2739 gint num = gtk_assistant_get_current_page (assistant);
2740 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2742 gtk_assistant_set_page_complete (assistant, page, gnc_ui_qif_import_comm_valid (assistant, user_data));
2756 gnc_ui_qif_import_convert_progress_pause_cb(GtkButton * button,
2760 SCM toggle_pause = scm_c_eval_string(
"qif-import:toggle-pause");
2767 progress = SWIG_NewPointerObj(wind->convert_progress,
2768 SWIG_TypeQuery(
"_p__GNCProgressDialog"),
2772 scm_call_1(toggle_pause, progress);
2775 if (strcmp(gtk_button_get_label(button), _(
"_Resume")))
2777 gtk_button_set_use_stock(button, FALSE);
2778 gtk_button_set_use_underline(button, TRUE);
2779 gtk_button_set_label(button, _(
"_Resume"));
2783 gtk_button_set_use_stock(button, TRUE);
2784 gtk_button_set_use_underline(button, FALSE);
2785 gtk_button_set_label(button,
"gtk-media-pause");
2796 gnc_ui_qif_import_convert_progress_start_cb(GtkButton * button,
2800 gint num = gtk_assistant_get_current_page (GTK_ASSISTANT(wind->window));
2801 GtkWidget *page = gtk_assistant_get_nth_page (GTK_ASSISTANT(wind->window), num);
2803 SCM qif_to_gnc = scm_c_eval_string(
"qif-import:qif-to-gnc");
2804 SCM find_duplicates = scm_c_eval_string(
"gnc:account-tree-find-duplicates");
2808 SCM progress = SWIG_NewPointerObj(wind->convert_progress,
2809 SWIG_TypeQuery(
"_p__GNCProgressDialog"),
2813 const gchar *currname = gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( GTK_COMBO_BOX(wind->currency_picker)))));
2817 gtk_widget_set_sensitive(wind->convert_pause, TRUE);
2818 gtk_widget_set_sensitive(wind->convert_start, FALSE);
2821 scm_c_eval_string(
"(qif-import:reset-cancel-pause)");
2824 gnc_ui_qif_import_commodity_update(wind);
2837 retval = scm_apply(qif_to_gnc,
2838 SCM_LIST8(wind->imported_files,
2839 wind->acct_map_info,
2841 wind->memo_map_info,
2842 wind->security_hash,
2843 scm_from_utf8_string(currname ? currname :
""),
2844 wind->transaction_status,
2849 if (retval == SCM_BOOL_T)
2854 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2858 gnc_ui_qif_import_convert_undo(wind);
2865 wind->load_stop = TRUE;
2867 else if (retval == SCM_BOOL_F)
2872 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2876 gnc_ui_qif_import_convert_undo(wind);
2880 _(
"A bug was detected while converting the QIF data."));
2883 gnc_error_dialog(wind->window,
"%s",
2884 _(
"A bug was detected while converting the QIF data."));
2888 wind->load_stop = TRUE;
2890 else if (scm_is_symbol(retval))
2895 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2899 gnc_ui_qif_import_convert_undo(wind);
2906 wind->load_stop = TRUE;
2910 scm_gc_unprotect_object(wind->imported_account_tree);
2911 wind->imported_account_tree = retval;
2912 scm_gc_protect_object(wind->imported_account_tree);
2920 retval = scm_call_3(find_duplicates,
2921 scm_c_eval_string(
"(gnc-get-current-root-account)"),
2922 wind->imported_account_tree, progress);
2926 scm_gc_unprotect_object(wind->match_transactions);
2927 wind->match_transactions = retval;
2928 scm_gc_protect_object(wind->match_transactions);
2930 if (retval == SCM_BOOL_T)
2933 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2936 wind->load_stop = TRUE;
2938 else if (retval == SCM_BOOL_F)
2944 gnc_ui_qif_import_convert_undo(wind);
2948 _(
"A bug was detected while detecting duplicates."));
2951 gnc_error_dialog(wind->window,
"%s",
2952 _(
"A bug was detected while detecting duplicates."));
2955 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2957 wind->load_stop = TRUE;
2961 gtk_assistant_set_page_complete (GTK_ASSISTANT(wind->window), page, TRUE);
2964 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2965 gtk_widget_set_sensitive(wind->convert_start, FALSE);
2967 if (wind->load_stop == FALSE)
2971 _(
"Conversion completed"));
2974 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
2978 if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(wind->convert_log))) == 0)
2979 gtk_assistant_set_current_page (GTK_ASSISTANT(wind->window), num + 1);
2990 gnc_ui_qif_import_convert_progress_prepare(GtkAssistant *assistant,
2994 gint num = gtk_assistant_get_current_page (assistant);
2995 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
2998 gtk_assistant_update_buttons_state( assistant );
3003 _(
"When you press the Start Button, GnuCash will import your QIF data. If there are no errors or warnings, you will automatically proceed to the next step. Otherwise, the details will be shown below for your review."));
3009 gtk_widget_set_sensitive(wind->convert_pause, FALSE);
3010 gtk_widget_set_sensitive(wind->convert_start, TRUE);
3013 gtk_assistant_set_page_complete (assistant, page, FALSE);
3018 wind->new_book = gnc_new_book_option_display(wind->window);
3030 gnc_ui_qif_import_duplicates_doc_prepare (GtkAssistant *assistant,
3034 gint num = gtk_assistant_get_current_page (assistant);
3035 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
3036 gint total = gtk_assistant_get_n_pages (assistant);
3037 gtk_assistant_update_buttons_state (assistant);
3039 PINFO(
"Total Number of Assistant Pages is %d", gtk_assistant_get_n_pages (assistant));
3042 gtk_assistant_set_page_complete (assistant, page, TRUE);
3045 if (wind->load_stop)
3046 gtk_assistant_set_current_page (assistant, total - 1 );
3049 if (!wind->show_doc_pages)
3050 gtk_assistant_set_current_page (assistant, num + 1 );
3053 if (scm_is_null(wind->match_transactions))
3054 gtk_assistant_set_current_page (assistant, num + 1 );
3066 gnc_ui_qif_import_duplicates_match_prepare (GtkAssistant *assistant,
3070 gint num = gtk_assistant_get_current_page (assistant);
3071 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
3074 GtkListStore *store;
3080 GtkTreeSelection *selection;
3082 const gchar *amount_str;
3085 if (!scm_is_null(wind->match_transactions))
3087 view = GTK_TREE_VIEW(wind->new_transaction_view);
3088 store = GTK_LIST_STORE(gtk_tree_view_get_model(view));
3089 gtk_list_store_clear(store);
3091 if (!scm_is_list(wind->match_transactions))
3095 duplicates = wind->match_transactions;
3096 while (!scm_is_null(duplicates))
3098 current_xtn = SCM_CAAR(duplicates);
3099 #define FUNC_NAME "xaccTransCountSplits"
3100 gnc_xtn = SWIG_MustGetPtr(current_xtn,
3101 SWIG_TypeQuery(
"_p_Transaction"), 1, 0);
3104 amount_str = _(
"(split)");
3110 gnc_account_print_info
3113 gtk_list_store_append(store, &iter);
3116 QIF_TRANS_COL_INDEX, rownum++,
3120 QIF_TRANS_COL_AMOUNT, amount_str,
3123 duplicates = SCM_CDR(duplicates);
3125 selection = gtk_tree_view_get_selection(view);
3126 path = gtk_tree_path_new_from_indices(0, -1);
3127 gtk_tree_selection_select_path(selection, path);
3128 gtk_tree_path_free(path);
3131 gtk_assistant_set_current_page (assistant, num + 1 );
3134 gtk_assistant_set_page_complete (assistant, page, TRUE);
3146 gnc_ui_qif_import_end_page_prepare (GtkAssistant *assistant,
3149 gint num = gtk_assistant_get_current_page (assistant);
3150 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
3153 gtk_assistant_set_page_complete (assistant, page, TRUE);
3163 gnc_ui_qif_import_finish_cb (GtkAssistant *gtkassistant,
3168 SCM save_map_prefs = scm_c_eval_string(
"qif-import:save-map-prefs");
3169 SCM cat_and_merge = scm_c_eval_string(
"gnc:account-tree-catenate-and-merge");
3170 SCM prune_xtns = scm_c_eval_string(
"gnc:prune-matching-transactions");
3174 gboolean acct_tree_found = FALSE;
3176 gnc_suspend_gui_refresh();
3179 if (wind->match_transactions != SCM_BOOL_F)
3180 scm_call_1(prune_xtns, wind->match_transactions);
3183 if (wind->imported_account_tree != SCM_BOOL_F)
3184 scm_call_2(cat_and_merge,
3185 scm_c_eval_string(
"(gnc-get-current-root-account)"),
3186 wind->imported_account_tree);
3188 gnc_resume_gui_refresh();
3191 scm_result = scm_apply(save_map_prefs,
3192 SCM_LIST5(wind->acct_map_info, wind->cat_map_info,
3193 wind->memo_map_info, wind->security_hash,
3194 wind->security_prefs),
3197 if (scm_result == SCM_BOOL_F)
3198 gnc_warning_dialog(wind->window,
"%s",
3199 _(
"GnuCash was unable to save your mapping preferences."));
3202 gnc_main_window_foreach_page(gnc_ui_qif_import_check_acct_tree,
3205 wind->acct_tree_found = acct_tree_found;
3206 if (!acct_tree_found)
3222 gnc_ui_qif_import_summary_page_prepare (GtkAssistant *assistant,
3226 gint num = gtk_assistant_get_current_page (assistant);
3227 GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
3231 if (wind->load_stop)
3232 text = g_strdup_printf(_(
"There was a problem with the import."));
3234 text = g_strdup_printf(_(
"QIF Import Completed."));
3236 gtk_label_set_markup(GTK_LABEL(wind->summary_text), g_strdup_printf(
"<span size=\"large\"><b>%s</b></span>", text));
3241 gtk_assistant_set_page_complete (assistant, page, TRUE);
3248 void gnc_ui_qif_import_prepare_cb (GtkAssistant *assistant, GtkWidget *page,
3251 gint currentpage = gtk_assistant_get_current_page(assistant);
3252 GtkWidget *mypage = gtk_assistant_get_nth_page (assistant, currentpage);
3253 const char *pagename = gtk_buildable_get_name(GTK_BUILDABLE(mypage));
3255 PINFO(
"Builder Page Name is %s", gtk_buildable_get_name(GTK_BUILDABLE(mypage)));
3257 if (!g_strcmp0 (pagename,
"start_page"))
3260 gnc_ui_qif_import_intro_prepare (assistant, user_data);
3262 else if (!g_strcmp0 (pagename,
"load_file_page"))
3265 gnc_ui_qif_import_load_file_prepare (assistant, user_data);
3267 else if (!g_strcmp0 (pagename,
"load_progress_page"))
3270 gnc_ui_qif_import_load_progress_prepare (assistant, user_data);
3272 else if (!g_strcmp0 (pagename,
"date_format_page"))
3275 gnc_ui_qif_import_date_format_prepare (assistant, user_data);
3277 else if (!g_strcmp0 (pagename,
"account_name_page"))
3280 gnc_ui_qif_import_account_prepare (assistant, user_data);
3282 else if (!g_strcmp0 (pagename,
"loaded_files_page"))
3285 gnc_ui_qif_import_loaded_files_prepare (assistant, user_data);
3287 else if (!g_strcmp0 (pagename,
"account_doc_page"))
3290 gnc_ui_qif_import_account_doc_prepare (assistant, user_data);
3292 else if (!g_strcmp0 (pagename,
"account_match_page"))
3295 gnc_ui_qif_import_account_match_prepare (assistant, user_data);
3297 else if (!g_strcmp0 (pagename,
"category_doc_page"))
3300 gnc_ui_qif_import_catagory_doc_prepare (assistant, user_data);
3302 else if (!g_strcmp0 (pagename,
"category_match_page"))
3305 gnc_ui_qif_import_catagory_match_prepare (assistant, user_data);
3307 else if (!g_strcmp0 (pagename,
"memo_doc_page"))
3310 gnc_ui_qif_import_memo_doc_prepare (assistant, user_data);
3312 else if (!g_strcmp0 (pagename,
"memo_match_page"))
3315 gnc_ui_qif_import_memo_match_prepare (assistant, user_data);
3317 else if (!g_strcmp0 (pagename,
"currency_book_option_page"))
3320 gnc_ui_qif_import_currency_prepare (assistant, user_data);
3322 else if (!g_strcmp0 (pagename,
"commodity_doc_page"))
3325 gnc_ui_qif_import_commodity_doc_prepare (assistant, user_data);
3327 else if (!g_strcmp0 (pagename,
"commodity_page"))
3332 else if (!g_strcmp0 (pagename,
"convert_progress_page"))
3335 gnc_ui_qif_import_convert_progress_prepare (assistant, user_data);
3337 else if (!g_strcmp0 (pagename,
"duplicates_doc_page"))
3340 gnc_ui_qif_import_duplicates_doc_prepare (assistant, user_data);
3342 else if (!g_strcmp0 (pagename,
"duplicates_match_page"))
3345 gnc_ui_qif_import_duplicates_match_prepare (assistant, user_data);
3347 else if (!g_strcmp0 (pagename,
"end_page"))
3350 gnc_ui_qif_import_end_page_prepare (assistant, user_data);
3352 else if (!g_strcmp0 (pagename,
"summary_page"))
3355 gnc_ui_qif_import_summary_page_prepare (assistant, user_data);
3360 gnc_ui_qif_import_commodity_new_prepare (assistant, user_data);
3373 g_return_if_fail(wind);
3374 g_return_if_fail(builder);
3376 wind->window = GTK_WIDGET(gtk_builder_get_object (builder,
"QIF Import Assistant"));
3377 wind->filename_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"qif_filename_entry"));
3378 wind->load_pause = GTK_WIDGET(gtk_builder_get_object (builder,
"load_progress_pause"));
3379 wind->load_start = GTK_WIDGET(gtk_builder_get_object (builder,
"load_progress_start"));
3380 wind->load_log = GTK_WIDGET(gtk_builder_get_object (builder,
"load_progress_log"));
3382 GTK_LABEL(gtk_builder_get_object (builder,
"load_progress_primary")),
3383 GTK_LABEL(gtk_builder_get_object (builder,
"load_progress_secondary")),
3384 GTK_PROGRESS_BAR(gtk_builder_get_object (builder,
"load_progress_bar")),
3385 GTK_LABEL(gtk_builder_get_object (builder,
"load_progress_sub")),
3386 GTK_TEXT_VIEW(wind->load_log));
3387 wind->acct_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"qif_account_entry"));
3388 wind->date_format_combo = GTK_WIDGET(gtk_builder_get_object (builder,
"date_format_combobox"));
3389 wind->selected_file_view = GTK_WIDGET(gtk_builder_get_object (builder,
"selected_file_view"));
3390 wind->unload_file_btn = GTK_WIDGET(gtk_builder_get_object (builder,
"unload_file_button"));
3391 wind->currency_picker = GTK_WIDGET(gtk_builder_get_object (builder,
"currency_comboboxentry"));
3392 wind->book_option_label = GTK_WIDGET(gtk_builder_get_object (builder,
"book_option_label"));
3393 wind->book_option_message = GTK_WIDGET(gtk_builder_get_object (builder,
"book_option_message_label"));
3394 wind->acct_view = GTK_WIDGET(gtk_builder_get_object (builder,
"account_page_view"));
3395 wind->acct_view_count = GTK_WIDGET(gtk_builder_get_object (builder,
"account_page_count"));
3396 wind->acct_view_btn = GTK_WIDGET(gtk_builder_get_object (builder,
"account_page_change"));
3397 wind->cat_view = GTK_WIDGET(gtk_builder_get_object (builder,
"category_page_view"));
3398 wind->cat_view_count = GTK_WIDGET(gtk_builder_get_object (builder,
"category_page_count"));
3399 wind->cat_view_btn = GTK_WIDGET(gtk_builder_get_object (builder,
"category_page_change"));
3400 wind->memo_view = GTK_WIDGET(gtk_builder_get_object (builder,
"memo_page_view"));
3401 wind->memo_view_count = GTK_WIDGET(gtk_builder_get_object (builder,
"memo_page_count"));
3402 wind->memo_view_btn = GTK_WIDGET(gtk_builder_get_object (builder,
"memo_page_change"));
3403 wind->convert_pause = GTK_WIDGET(gtk_builder_get_object (builder,
"convert_progress_pause"));
3404 wind->convert_start = GTK_WIDGET(gtk_builder_get_object (builder,
"convert_progress_start"));
3405 wind->convert_log = GTK_WIDGET(gtk_builder_get_object (builder,
"convert_progress_log"));
3407 GTK_LABEL(gtk_builder_get_object (builder,
"convert_progress_primary")),
3408 GTK_LABEL(gtk_builder_get_object (builder,
"convert_progress_secondary")),
3409 GTK_PROGRESS_BAR(gtk_builder_get_object (builder,
"convert_progress_bar")),
3410 GTK_LABEL(gtk_builder_get_object (builder,
"convert_progress_sub")),
3411 GTK_TEXT_VIEW(wind->convert_log));
3412 wind->summary_text = GTK_WIDGET(gtk_builder_get_object (builder,
"summary_page"));
3414 wind->new_transaction_view =
3415 GTK_WIDGET(gtk_builder_get_object (builder,
"new_transaction_view"));
3416 wind->old_transaction_view =
3417 GTK_WIDGET(gtk_builder_get_object (builder,
"old_transaction_view"));
3419 gnc_assistant_set_colors (GTK_ASSISTANT (wind->window));
3432 GtkListStore *store;
3433 GtkCellRenderer *renderer;
3434 GtkTreeViewColumn *column;
3435 GtkTreeSelection *selection;
3437 g_return_if_fail(wind);
3440 view = GTK_TREE_VIEW(wind->selected_file_view);
3441 store = gtk_list_store_new(NUM_FILENAME_COLS, G_TYPE_INT, G_TYPE_STRING);
3442 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
3443 g_object_unref(store);
3445 renderer = gtk_cell_renderer_text_new();
3446 column = gtk_tree_view_column_new_with_attributes(
"unused",
3451 gtk_tree_view_append_column(view, column);
3453 selection = gtk_tree_view_get_selection(view);
3454 g_signal_connect(selection,
"changed",
3455 G_CALLBACK(gnc_ui_qif_import_select_loaded_file_cb),
3459 create_account_picker_view(wind->acct_view, _(
"QIF account name"),
3460 G_CALLBACK(gnc_ui_qif_import_account_activate_cb),
3461 G_CALLBACK(gnc_ui_qif_import_account_select_cb),
3465 create_account_picker_view(wind->cat_view, _(
"QIF category name"),
3466 G_CALLBACK(gnc_ui_qif_import_category_activate_cb),
3467 G_CALLBACK(gnc_ui_qif_import_category_select_cb),
3471 create_account_picker_view(wind->memo_view, _(
"QIF payee/memo"),
3472 G_CALLBACK(gnc_ui_qif_import_memo_activate_cb),
3473 G_CALLBACK(gnc_ui_qif_import_memo_select_cb),
3477 view = GTK_TREE_VIEW(wind->new_transaction_view);
3478 store = gtk_list_store_new(NUM_QIF_TRANS_COLS, G_TYPE_INT, G_TYPE_STRING,
3479 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
3480 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
3481 g_object_unref(store);
3483 renderer = gtk_cell_renderer_text_new();
3484 column = gtk_tree_view_column_new_with_attributes(_(
"Date"),
3489 gtk_tree_view_append_column(view, column);
3491 renderer = gtk_cell_renderer_text_new();
3492 column = gtk_tree_view_column_new_with_attributes(_(
"Description"),
3495 QIF_TRANS_COL_DESCRIPTION,
3497 gtk_tree_view_append_column(view, column);
3498 gtk_tree_view_column_set_expand(column, TRUE);
3500 renderer = gtk_cell_renderer_text_new();
3501 column = gtk_tree_view_column_new_with_attributes(_(
"Amount"),
3504 QIF_TRANS_COL_AMOUNT,
3506 gtk_tree_view_append_column(view, column);
3508 selection = gtk_tree_view_get_selection(view);
3509 g_signal_connect(selection,
"changed",
3510 G_CALLBACK(gnc_ui_qif_import_duplicate_new_select_cb),
3514 view = GTK_TREE_VIEW(wind->old_transaction_view);
3515 store = gtk_list_store_new(NUM_QIF_TRANS_COLS, G_TYPE_INT, G_TYPE_STRING,
3516 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
3517 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
3518 g_object_unref(store);
3520 renderer = gtk_cell_renderer_text_new();
3521 column = gtk_tree_view_column_new_with_attributes(_(
"Date"),
3526 gtk_tree_view_append_column(view, column);
3528 renderer = gtk_cell_renderer_text_new();
3529 column = gtk_tree_view_column_new_with_attributes(_(
"Description"),
3532 QIF_TRANS_COL_DESCRIPTION,
3534 gtk_tree_view_append_column(view, column);
3535 gtk_tree_view_column_set_expand(column, TRUE);
3537 renderer = gtk_cell_renderer_text_new();
3538 column = gtk_tree_view_column_new_with_attributes(_(
"Amount"),
3541 QIF_TRANS_COL_AMOUNT,
3543 gtk_tree_view_append_column(view, column);
3545 renderer = gtk_cell_renderer_toggle_new();
3546 column = gtk_tree_view_column_new_with_attributes(_(
"Match?"),
3549 QIF_TRANS_COL_CHECKED,
3551 gtk_tree_view_append_column(view, column);
3553 selection = gtk_tree_view_get_selection(view);
3554 g_signal_connect(selection,
"changed",
3555 G_CALLBACK(gnc_ui_qif_import_duplicate_old_select_cb),
3568 GtkBuilder *builder;
3571 builder = gtk_builder_new();
3572 gnc_builder_add_from_file (builder,
"assistant-qif-import.glade",
"currency_liststore");
3573 gnc_builder_add_from_file (builder,
"assistant-qif-import.glade",
"date_format_liststore");
3574 gnc_builder_add_from_file (builder,
"assistant-qif-import.glade",
"QIF Import Assistant");
3576 qif_win->new_namespaces = NULL;
3577 qif_win->selected_transaction = 0;
3578 qif_win->busy = FALSE;
3581 qif_win->new_book = gnc_is_new_book();
3584 get_preferences(qif_win);
3589 initialize_scheme(qif_win);
3592 get_assistant_widgets(qif_win, builder);
3595 gtk_window_set_transient_for (GTK_WINDOW (qif_win->window),
3599 build_views(qif_win);
3605 gtk_widget_show (qif_win->currency_picker);
3606 box = GTK_WIDGET(gtk_builder_get_object (builder,
"currency_picker_hbox"));
3607 gtk_box_pack_start(GTK_BOX(box), qif_win->currency_picker, TRUE, TRUE, 0);
3609 gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(qif_win->window));
3611 g_signal_connect( qif_win->window,
"destroy",
3612 G_CALLBACK(gnc_ui_qif_import_assistant_destroy), qif_win );
3614 gtk_builder_connect_signals(builder, qif_win);
3616 g_object_unref(G_OBJECT(builder));
3618 gtk_widget_show_all(qif_win->window);
3619 gtk_window_present(GTK_WINDOW(qif_win->window));
3621 return qif_win->window;
3629 gnc_ui_qif_import_assistant_close_handler( gpointer user_data )
3633 gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(qif_win->window));
3634 gtk_widget_destroy( qif_win->window );
3642 gnc_file_qif_import(
void)
3650 gnc_ui_qif_import_assistant_make(qif_win);
3652 component_id = gnc_register_gui_component (ASSISTANT_QIF_IMPORT_CM_CLASS,
3653 NULL, gnc_ui_qif_import_assistant_close_handler,
3656 gnc_gui_component_watch_entity_type (component_id,
3658 QOF_EVENT_MODIFY | QOF_EVENT_DESTROY);
3660 gtk_widget_show_all (qif_win->window);
3662 gnc_window_adjust_for_screen (GTK_WINDOW(qif_win->window));
gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table *table, gnc_commodity *comm)
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
Split * xaccTransGetSplit(const Transaction *trans, int i)
const char * gnc_print_date(Timespec ts)
void gnc_currency_edit_set_currency(GNCCurrencyEdit *gce, const gnc_commodity *currency)
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
GncPluginPage * gnc_plugin_page_account_tree_new(void)
void gnc_progress_dialog_set_secondary(GNCProgressDialog *progress, const gchar *str)
void gnc_progress_dialog_append_log(GNCProgressDialog *progress, const gchar *str)
utility functions for the GnuCash UI
#define PINFO(format, args...)
gchar * gnc_ui_namespace_picker_ns(GtkWidget *cbwe)
void gnc_progress_dialog_destroy(GNCProgressDialog *progress)
void gnc_progress_dialog_set_value(GNCProgressDialog *progress, gdouble value)
API for displaying progress of long-running operations.
void gnc_progress_dialog_reset_value(GNCProgressDialog *progress)
const char * gnc_commodity_get_namespace(const gnc_commodity *cm)
gnc_commodity_namespace * gnc_commodity_table_add_namespace(gnc_commodity_table *table, const char *name_space, QofBook *book)
void gnc_main_window_open_page(GncMainWindow *window, GncPluginPage *page)
Functions for adding content to a window.
gnc_commodity * gnc_default_currency(void)
GNCProgressDialog * gnc_progress_dialog_custom(GtkLabel *primary, GtkLabel *secondary, GtkProgressBar *bar, GtkLabel *suboperation, GtkTextView *log)
int xaccTransCountSplits(const Transaction *trans)
Currency selection widget.
Account handling public routines.
void gnc_progress_dialog_set_sub(GNCProgressDialog *progress, const gchar *str)
int gnc_commodity_table_has_namespace(const gnc_commodity_table *table, const char *name_space)
void gnc_commodity_table_delete_namespace(gnc_commodity_table *table, const char *name_space)
gboolean gnc_commodity_namespace_is_iso(const char *name_space)
const char * xaccTransGetDescription(const Transaction *trans)
const char * gnc_commodity_get_fullname(const gnc_commodity *cm)
void gnc_progress_dialog_reset_log(GNCProgressDialog *progress)
void gnc_progress_dialog_set_primary(GNCProgressDialog *progress, const gchar *str)
gnc_numeric gnc_numeric_abs(gnc_numeric a)
void qof_book_mark_session_dirty(QofBook *book)
Generic api to store and retrieve preferences.
Functions providing a chart of account page.
void gnc_commodity_set_fullname(gnc_commodity *cm, const char *fullname)
GtkWidget * gnc_currency_edit_new(void)
gnc_numeric xaccSplitGetValue(const Split *split)
Account * xaccSplitGetAccount(const Split *s)
void gnc_commodity_set_mnemonic(gnc_commodity *cm, const char *mnemonic)
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
Timespec xaccTransRetDatePostedTS(const Transaction *trans)
void gnc_commodity_set_namespace(gnc_commodity *cm, const char *name_space)
GtkWidget * gnc_ui_get_toplevel(void)
guint gnc_progress_dialog_pop(GNCProgressDialog *progress)
API for Transactions and Splits (journal entries)
void gnc_ui_update_namespace_picker(GtkWidget *cbwe, const gchar *sel, dialog_commodity_mode mode)
"select" and "new" commodity windows
void gnc_commodity_destroy(gnc_commodity *cm)
guint gnc_progress_dialog_push(GNCProgressDialog *progress, gdouble weight)
const gchar * QofLogModule