r17388 - gnucash/branches/2.2/src/import-export/qif-import - [r17336] QIF Import: Allow column resizing on account mappings pages.
Andreas Köhler
andi5 at cvs.gnucash.org
Tue Jul 22 18:34:18 EDT 2008
Author: andi5
Date: 2008-07-22 18:34:18 -0400 (Tue, 22 Jul 2008)
New Revision: 17388
Trac: http://svn.gnucash.org/trac/changeset/17388
Modified:
gnucash/branches/2.2/src/import-export/qif-import/druid-qif-import.c
Log:
[r17336] QIF Import: Allow column resizing on account mappings pages.
Reorganize a massive and messy function into reasonably-sized chunks.
Committed by cedayiv.
Modified: gnucash/branches/2.2/src/import-export/qif-import/druid-qif-import.c
===================================================================
--- gnucash/branches/2.2/src/import-export/qif-import/druid-qif-import.c 2008-07-22 22:34:07 UTC (rev 17387)
+++ gnucash/branches/2.2/src/import-export/qif-import/druid-qif-import.c 2008-07-22 22:34:18 UTC (rev 17388)
@@ -398,9 +398,9 @@
int where = 0;
/* Figure out which stage of the druid we're in. */
- if((current = g_list_find(wind->pre_comm_pages, page)) == NULL) {
- if((current = g_list_find(wind->commodity_pages, page)) == NULL) {
- if((current = g_list_find(wind->post_comm_pages, page)) == NULL) {
+ if ((current = g_list_find(wind->pre_comm_pages, page)) == NULL) {
+ if ((current = g_list_find(wind->commodity_pages, page)) == NULL) {
+ if ((current = g_list_find(wind->post_comm_pages, page)) == NULL) {
/* Where are we? */
g_critical("QIF import: BUG DETECTED in get_next_druid_page! I'm lost!");
return FALSE;
@@ -422,7 +422,7 @@
(!wind->show_doc_pages && g_list_find(wind->doc_pages, next->data)) ||
(wind->new_securities == SCM_BOOL_F &&
GNOME_DRUID_PAGE(next->data) == get_named_page(wind, "commodity_doc_page"))) {
- if(next && next->next) {
+ if (next && next->next) {
next = next->next;
}
else {
@@ -467,9 +467,9 @@
int where = 0;
/* Figure out which stage of the druid we're in. */
- if((current = g_list_find(wind->pre_comm_pages, page)) == NULL) {
- if((current = g_list_find(wind->commodity_pages, page)) == NULL) {
- if((current = g_list_find(wind->post_comm_pages, page)) == NULL) {
+ if ((current = g_list_find(wind->pre_comm_pages, page)) == NULL) {
+ if ((current = g_list_find(wind->commodity_pages, page)) == NULL) {
+ if ((current = g_list_find(wind->post_comm_pages, page)) == NULL) {
/* Where are we? */
g_critical("QIF import: BUG DETECTED in get_prev_druid_page! I'm lost!");
return NULL;
@@ -503,7 +503,7 @@
/* We're either out of pages for this stage, or we've reached
* an optional doc page that shouldn't be shown. */
- if(prev && prev->prev) {
+ if (prev && prev->prev) {
/* Go back another page within the same stage. */
prev = prev->prev;
}
@@ -515,7 +515,7 @@
prev = g_list_last(wind->pre_comm_pages);
break;
case 2:
- if(wind->new_securities != SCM_BOOL_F) {
+ if (wind->new_securities != SCM_BOOL_F) {
prev = g_list_last(wind->commodity_pages);
}
else {
@@ -533,7 +533,7 @@
}
}
- if(prev)
+ if (prev)
return (GtkWidget *)prev->data;
return NULL;
@@ -553,7 +553,7 @@
QIFImportWindow * wind = user_data;
GtkWidget * next_page = get_next_druid_page(wind, page);
- if(next_page)
+ if (next_page)
{
gnome_druid_set_page(GNOME_DRUID(wind->druid),
GNOME_DRUID_PAGE(next_page));
@@ -577,7 +577,7 @@
QIFImportWindow * wind = user_data;
GtkWidget * back_page = get_prev_druid_page(wind, page);
- if(back_page)
+ if (back_page)
{
gnome_druid_set_page(GNOME_DRUID(wind->druid),
GNOME_DRUID_PAGE(back_page));
@@ -1213,7 +1213,7 @@
FILENAME_COL_INDEX, row++,
FILENAME_COL_NAME, row_text,
-1);
- if(scm_qiffile == wind->selected_file) {
+ if (scm_qiffile == wind->selected_file) {
path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
reference = gtk_tree_row_reference_new(GTK_TREE_MODEL(store), path);
gtk_tree_path_free(path);
@@ -1252,7 +1252,7 @@
button = gnc_glade_lookup_widget(wind->window, "unload_file_button");
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
gtk_tree_model_get(model, &iter, FILENAME_COL_INDEX, &row, -1);
- if(SCM_LISTP(wind->imported_files) &&
+ if (SCM_LISTP(wind->imported_files) &&
(scm_ilength(wind->imported_files) > row)) {
scm_gc_unprotect_object(wind->selected_file);
wind->selected_file = scm_list_ref(wind->imported_files,
@@ -1326,7 +1326,7 @@
SCM unload_qif_file = scm_c_eval_string("qif-dialog:unload-qif-file");
SCM imported_files;
- if(wind->selected_file != SCM_BOOL_F) {
+ if (wind->selected_file != SCM_BOOL_F) {
imported_files =
scm_call_2(unload_qif_file, wind->selected_file, wind->imported_files);
@@ -1384,7 +1384,7 @@
SCM scm_name;
g_return_val_if_fail(wind->selected_file != SCM_BOOL_F, FALSE);
- if(!acct_name || acct_name[0] == 0) {
+ if (!acct_name || acct_name[0] == 0) {
gnc_warning_dialog(wind->window, _("You must enter an account name."));
return TRUE;
}
@@ -1456,7 +1456,7 @@
"text",
ACCOUNT_COL_QIF_NAME,
NULL);
- g_object_set(column, "expand", TRUE, NULL);
+ gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_append_column(view, column);
renderer = gtk_cell_renderer_text_new();
@@ -1466,6 +1466,7 @@
ACCOUNT_COL_GNC_NAME,
NULL);
g_object_set(column, "expand", TRUE, NULL);
+ gtk_tree_view_column_set_resizable(column, TRUE);
gtk_tree_view_append_column(view, column);
renderer = gtk_cell_renderer_toggle_new();
@@ -2057,20 +2058,20 @@
const gchar *name = gtk_entry_get_text(GTK_ENTRY(qpage->new_name_entry));
const gchar *mnemonic = gtk_entry_get_text(GTK_ENTRY(qpage->new_mnemonic_entry));
- if(!namespace || (namespace[0] == 0)) {
+ if (!namespace || (namespace[0] == 0)) {
gnc_warning_dialog(wind->window,
_("You must enter a Type for the commodity."));
if (namespace)
g_free(namespace);
return TRUE;
}
- else if(!name || (name[0] == 0)) {
+ else if (!name || (name[0] == 0)) {
gnc_warning_dialog(wind->window,
_("You must enter a name for the commodity."));
g_free(namespace);
return TRUE;
}
- else if(!mnemonic || (mnemonic[0] == 0)) {
+ else if (!mnemonic || (mnemonic[0] == 0)) {
gnc_warning_dialog
(wind->window, _("You must enter an abbreviation for the commodity."));
g_free(namespace);
@@ -2847,7 +2848,7 @@
store = GTK_LIST_STORE(gtk_tree_view_get_model(view));
gtk_list_store_clear(store);
- if(wind->match_transactions != SCM_BOOL_F) {
+ if (wind->match_transactions != SCM_BOOL_F) {
possible_matches = SCM_CDR(scm_list_ref(wind->match_transactions,
scm_int2num(wind->selected_transaction)));
scm_call_2(scm_c_eval_string("qif-import:refresh-match-selection"),
@@ -2861,7 +2862,7 @@
#undef FUNC_NAME
selected = SCM_CDR(current_xtn);
- if(xaccTransCountSplits(gnc_xtn) > 2) {
+ if (xaccTransCountSplits(gnc_xtn) > 2) {
amount_str = _("(split)");
}
else {
@@ -3114,55 +3115,121 @@
}
-/* ======================================================== */
-static gboolean
-show_handler(const char *class, gint component_id,
- gpointer user_data, gpointer iter_data)
-{
- QIFImportWindow *qif_win = user_data;
+/* ================================================================== */
+/* */
+/* IMPORTER CREATION */
+/* */
+/* ================================================================== */
- if (!qif_win)
- return(FALSE);
- gtk_window_present(GTK_WINDOW(qif_win->window));
- return(TRUE);
-}
-void
-gnc_file_qif_import(void)
+/********************************************************************
+ * get_preferences
+ *
+ * Get all user preferences related to QIF import.
+ ********************************************************************/
+
+static void
+get_preferences(QIFImportWindow *wind)
{
- if (gnc_forall_gui_components(DRUID_QIF_IMPORT_CM_CLASS,
- show_handler, NULL))
- return;
+ GError * err = NULL;
- /* pop up the QIF File Import dialog box */
- gnc_ui_qif_import_druid_make();
+ g_return_if_fail(wind);
+
+ /* Get the user's preference for showing documentation pages. */
+ wind->show_doc_pages =
+ gnc_gconf_get_bool(GCONF_SECTION, GCONF_NAME_SHOW_DOC, &err);
+ if (err != NULL) {
+ g_warning("QIF import: gnc_gconf_get_bool error: %s", err->message);
+ g_error_free(err);
+
+ /* Show documentation pages by default. */
+ g_warning("QIF import: Couldn't get %s setting from gconf.",
+ GCONF_NAME_SHOW_DOC);
+ g_warning("QIF import: Documentation pages will be shown by default.");
+ wind->show_doc_pages = TRUE;
+ }
}
/********************************************************************
- * gnc_ui_qif_import_druid_make()
- * build the druid.
+ * initialize_scheme
+ *
+ * Initialize all Scheme-controlled objects.
********************************************************************/
-QIFImportWindow *
-gnc_ui_qif_import_druid_make(void)
+static void
+initialize_scheme(QIFImportWindow *wind)
{
-
- QIFImportWindow * retval;
- GladeXML * xml;
- GError * err = NULL;
SCM load_map_prefs;
SCM mapping_info;
SCM create_ticker_map;
+
+ g_return_if_fail(wind);
+
+ /* Initialize Scheme variables. */
+ wind->imported_files = SCM_EOL;
+ wind->selected_file = SCM_BOOL_F;
+ wind->gnc_acct_info = SCM_BOOL_F;
+ wind->cat_display_info = SCM_BOOL_F;
+ wind->cat_map_info = SCM_BOOL_F;
+ wind->acct_display_info = SCM_BOOL_F;
+ wind->acct_map_info = SCM_BOOL_F;
+ wind->memo_display_info = SCM_BOOL_F;
+ wind->memo_map_info = SCM_BOOL_F;
+ wind->security_hash = SCM_BOOL_F;
+ wind->security_prefs = SCM_BOOL_F;
+ wind->new_securities = SCM_BOOL_F;
+ wind->ticker_map = SCM_BOOL_F;
+ wind->imported_account_tree = SCM_BOOL_F;
+ wind->match_transactions = SCM_BOOL_F;
+
+ /* Get the saved state of mappings from Quicken accounts and
+ * categories to GnuCash accounts. */
+ load_map_prefs = scm_c_eval_string("qif-import:load-map-prefs");
+ mapping_info = scm_call_0(load_map_prefs);
+ wind->gnc_acct_info = scm_list_ref(mapping_info, scm_int2num(0));
+ wind->acct_map_info = scm_list_ref(mapping_info, scm_int2num(1));
+ wind->cat_map_info = scm_list_ref(mapping_info, scm_int2num(2));
+ wind->memo_map_info = scm_list_ref(mapping_info, scm_int2num(3));
+ wind->security_hash = scm_list_ref(mapping_info, scm_int2num(4));
+ wind->security_prefs = scm_list_ref(mapping_info, scm_int2num(5));
+
+ /* Get the initial ticker map. */
+ create_ticker_map = scm_c_eval_string("make-ticker-map");
+ wind->ticker_map = scm_call_0(create_ticker_map);
+
+ /* Protect our data from garbage collection. */
+ scm_gc_protect_object(wind->imported_files);
+ scm_gc_protect_object(wind->selected_file);
+ scm_gc_protect_object(wind->gnc_acct_info);
+ scm_gc_protect_object(wind->cat_display_info);
+ scm_gc_protect_object(wind->cat_map_info);
+ scm_gc_protect_object(wind->memo_display_info);
+ scm_gc_protect_object(wind->memo_map_info);
+ scm_gc_protect_object(wind->acct_display_info);
+ scm_gc_protect_object(wind->acct_map_info);
+ scm_gc_protect_object(wind->security_hash);
+ scm_gc_protect_object(wind->security_prefs);
+ scm_gc_protect_object(wind->new_securities);
+ scm_gc_protect_object(wind->ticker_map);
+ scm_gc_protect_object(wind->imported_account_tree);
+ scm_gc_protect_object(wind->match_transactions);
+}
+
+
+/********************************************************************
+ * build_page_lists
+ *
+ * Build the lists of druid pages.
+ ********************************************************************/
+
+static void
+build_page_lists(QIFImportWindow *wind, GladeXML *xml)
+{
int i;
- GtkTreeView *view;
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
-
+ /* Pages that may appear prior to security-related pages. */
char * pre_page_names[NUM_PRE_PAGES] = {
"start_page", "load_file_page", "load_progress_page",
"date_format_page", "account_name_page",
@@ -3171,251 +3238,271 @@
"memo_match_page", "currency_page", "commodity_doc_page"
};
+ /* Pages that may appear after security-related pages. */
char * post_page_names[NUM_POST_PAGES] = {
"convert_progress_page", "match_doc_page", "match_duplicates_page",
"end_page"
};
+ /* Optional pages that only show documention. */
char * doc_page_names[NUM_DOC_PAGES] = {
"start_page", "account_doc_page", "category_doc_page",
"commodity_doc_page", "memo_doc_page", "match_doc_page"
};
- retval = g_new0(QIFImportWindow, 1);
+ g_return_if_fail(wind);
- xml = gnc_glade_xml_new("qif.glade", "QIF Import Druid");
+ wind->pre_comm_pages = NULL;
+ wind->post_comm_pages = NULL;
+ wind->doc_pages = NULL;
+ wind->commodity_pages = NULL;
+ g_return_if_fail(xml);
+
+ /* Build the page lists. */
+ for(i = 0; i < NUM_PRE_PAGES; i++) {
+ wind->pre_comm_pages =
+ g_list_append(wind->pre_comm_pages,
+ glade_xml_get_widget(xml, pre_page_names[i]));
+ }
+ for(i = 0; i < NUM_POST_PAGES; i++) {
+ wind->post_comm_pages =
+ g_list_append(wind->post_comm_pages,
+ glade_xml_get_widget(xml, post_page_names[i]));
+ }
+ for(i = 0; i < NUM_DOC_PAGES; i++) {
+ wind->doc_pages =
+ g_list_append(wind->doc_pages,
+ glade_xml_get_widget(xml, doc_page_names[i]));
+ }
+}
+
+
+/********************************************************************
+ * get_glade_widgets
+ *
+ * Get all glade-defined widgets that need to be actively managed.
+ ********************************************************************/
+
+static void
+get_glade_widgets(QIFImportWindow *wind, GladeXML *xml)
+{
+ g_return_if_fail(wind);
+ g_return_if_fail(xml);
+
+ wind->window = glade_xml_get_widget(xml, "QIF Import Druid");
+ wind->druid = glade_xml_get_widget(xml, "qif_import_druid");
+ wind->filename_entry = glade_xml_get_widget(xml, "qif_filename_entry");
+ wind->load_pause = glade_xml_get_widget(xml, "load_progress_pause");
+ wind->load_log = glade_xml_get_widget(xml, "load_progress_log");
+ wind->load_progress = gnc_progress_dialog_custom(
+ GTK_LABEL(glade_xml_get_widget(xml, "load_progress_primary")),
+ GTK_LABEL(glade_xml_get_widget(xml, "load_progress_secondary")),
+ GTK_PROGRESS_BAR(glade_xml_get_widget(xml, "load_progress_bar")),
+ GTK_LABEL(glade_xml_get_widget(xml, "load_progress_sub")),
+ GTK_TEXT_VIEW(wind->load_log));
+ wind->acct_entry = glade_xml_get_widget(xml, "qif_account_entry");
+ wind->date_format_combo = glade_xml_get_widget(xml, "date_format_combobox");
+ wind->selected_file_view = glade_xml_get_widget(xml, "selected_file_view");
+ wind->currency_picker = glade_xml_get_widget(xml, "currency_comboboxentry");
+ wind->acct_view = glade_xml_get_widget(xml, "account_page_view");
+ wind->acct_view_count = glade_xml_get_widget(xml, "account_page_count");
+ wind->acct_view_btn = glade_xml_get_widget(xml, "account_page_change");
+ wind->cat_view = glade_xml_get_widget(xml, "category_page_view");
+ wind->cat_view_count = glade_xml_get_widget(xml, "category_page_count");
+ wind->cat_view_btn = glade_xml_get_widget(xml, "category_page_change");
+ wind->memo_view = glade_xml_get_widget(xml, "memo_page_view");
+ wind->memo_view_count = glade_xml_get_widget(xml, "memo_page_count");
+ wind->memo_view_btn = glade_xml_get_widget(xml, "memo_page_change");
+ wind->convert_pause = glade_xml_get_widget(xml, "convert_progress_pause");
+ wind->convert_log = glade_xml_get_widget(xml, "convert_progress_log");
+ wind->convert_progress = gnc_progress_dialog_custom(
+ GTK_LABEL(glade_xml_get_widget(xml, "convert_progress_primary")),
+ GTK_LABEL(glade_xml_get_widget(xml, "convert_progress_secondary")),
+ GTK_PROGRESS_BAR(glade_xml_get_widget(xml, "convert_progress_bar")),
+ GTK_LABEL(glade_xml_get_widget(xml, "convert_progress_sub")),
+ GTK_TEXT_VIEW(wind->convert_log));
+ wind->new_transaction_view =
+ glade_xml_get_widget(xml, "new_transaction_view");
+ wind->old_transaction_view =
+ glade_xml_get_widget(xml, "old_transaction_view");
+}
+
+
+/********************************************************************
+ * connect_glade_signals
+ *
+ * Connect all glade-defined signals to their handlers.
+ ********************************************************************/
+
+static void
+connect_glade_signals(QIFImportWindow *wind, GladeXML *xml)
+{
+ g_return_if_fail(wind);
+ g_return_if_fail(xml);
+
+ /*
+ * Connect all glade-defined signals to their handlers.
+ */
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_cancel_cb",
- G_CALLBACK(gnc_ui_qif_import_cancel_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_cancel_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_generic_next_cb",
- G_CALLBACK(gnc_ui_qif_import_generic_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_generic_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_generic_back_cb",
- G_CALLBACK(gnc_ui_qif_import_generic_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_generic_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_select_file_cb",
- G_CALLBACK(gnc_ui_qif_import_select_file_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_select_file_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_file_back_cb",
- G_CALLBACK(gnc_ui_qif_import_load_file_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_file_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_file_next_cb",
- G_CALLBACK(gnc_ui_qif_import_load_file_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_file_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_progress_prepare_cb",
- G_CALLBACK(gnc_ui_qif_import_load_progress_prepare_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_progress_prepare_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_progress_show_cb",
- G_CALLBACK(gnc_ui_qif_import_load_progress_show_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_progress_show_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_progress_pause_cb",
- G_CALLBACK(gnc_ui_qif_import_load_progress_pause_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_progress_pause_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_progress_next_cb",
- G_CALLBACK(gnc_ui_qif_import_load_progress_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_progress_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_progress_back_cb",
- G_CALLBACK(gnc_ui_qif_import_load_progress_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_progress_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_date_format_next_cb",
- G_CALLBACK(gnc_ui_qif_import_date_format_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_date_format_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_loaded_files_prepare_cb",
- G_CALLBACK(gnc_ui_qif_import_loaded_files_prepare_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_loaded_files_prepare_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_load_another_cb",
- G_CALLBACK(gnc_ui_qif_import_load_another_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_load_another_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_unload_file_cb",
- G_CALLBACK(gnc_ui_qif_import_unload_file_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_unload_file_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_loaded_files_next_cb",
- G_CALLBACK(gnc_ui_qif_import_loaded_files_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_loaded_files_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_default_acct_next_cb",
- G_CALLBACK(gnc_ui_qif_import_default_acct_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_default_acct_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_default_acct_back_cb",
- G_CALLBACK(gnc_ui_qif_import_default_acct_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_default_acct_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_account_rematch_cb",
- G_CALLBACK(gnc_ui_qif_import_account_rematch_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_account_rematch_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_account_next_cb",
- G_CALLBACK(gnc_ui_qif_import_account_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_account_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_category_rematch_cb",
- G_CALLBACK(gnc_ui_qif_import_category_rematch_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_category_rematch_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_category_next_cb",
- G_CALLBACK(gnc_ui_qif_import_category_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_category_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_memo_doc_back_cb",
- G_CALLBACK(gnc_ui_qif_import_memo_doc_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_memo_doc_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_memo_rematch_cb",
- G_CALLBACK(gnc_ui_qif_import_memo_rematch_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_memo_rematch_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_memo_back_cb",
- G_CALLBACK(gnc_ui_qif_import_memo_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_memo_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_currency_back_cb",
- G_CALLBACK(gnc_ui_qif_import_currency_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_currency_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_currency_next_cb",
- G_CALLBACK(gnc_ui_qif_import_currency_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_currency_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_convert_progress_prepare_cb",
- G_CALLBACK(gnc_ui_qif_import_convert_progress_prepare_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_convert_progress_prepare_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_convert_progress_show_cb",
- G_CALLBACK(gnc_ui_qif_import_convert_progress_show_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_convert_progress_show_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_convert_progress_pause_cb",
- G_CALLBACK(gnc_ui_qif_import_convert_progress_pause_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_convert_progress_pause_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_convert_progress_next_cb",
- G_CALLBACK(gnc_ui_qif_import_convert_progress_next_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_convert_progress_next_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_convert_progress_back_cb",
- G_CALLBACK(gnc_ui_qif_import_convert_progress_back_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_convert_progress_back_cb), wind);
glade_xml_signal_connect_data
(xml, "gnc_ui_qif_import_finish_cb",
- G_CALLBACK(gnc_ui_qif_import_finish_cb), retval);
+ G_CALLBACK(gnc_ui_qif_import_finish_cb), wind);
+}
- retval->window = glade_xml_get_widget(xml, "QIF Import Druid");
- retval->imported_files = SCM_EOL;
- retval->selected_file = SCM_BOOL_F;
- retval->gnc_acct_info = SCM_BOOL_F;
- retval->cat_display_info = SCM_BOOL_F;
- retval->cat_map_info = SCM_BOOL_F;
- retval->acct_display_info = SCM_BOOL_F;
- retval->acct_map_info = SCM_BOOL_F;
- retval->memo_display_info = SCM_BOOL_F;
- retval->memo_map_info = SCM_BOOL_F;
- retval->security_hash = SCM_BOOL_F;
- retval->new_securities = SCM_BOOL_F;
- retval->new_namespaces = NULL;
- retval->ticker_map = SCM_BOOL_F;
- retval->imported_account_tree = SCM_BOOL_F;
- retval->match_transactions = SCM_BOOL_F;
- retval->selected_transaction = 0;
- retval->busy = FALSE;
+/********************************************************************
+ * build_views
+ *
+ * Build the details of all GtkTreeView widgets.
+ ********************************************************************/
- retval->druid = glade_xml_get_widget(xml, "qif_import_druid");
- retval->filename_entry = glade_xml_get_widget(xml, "qif_filename_entry");
- retval->load_pause = glade_xml_get_widget(xml, "load_progress_pause");
- retval->load_log = glade_xml_get_widget(xml, "load_progress_log");
- retval->load_progress = gnc_progress_dialog_custom(
- GTK_LABEL(glade_xml_get_widget(xml, "load_progress_primary")),
- GTK_LABEL(glade_xml_get_widget(xml, "load_progress_secondary")),
- GTK_PROGRESS_BAR(glade_xml_get_widget(xml, "load_progress_bar")),
- GTK_LABEL(glade_xml_get_widget(xml, "load_progress_sub")),
- GTK_TEXT_VIEW(retval->load_log));
- retval->acct_entry = glade_xml_get_widget(xml, "qif_account_entry");
- retval->date_format_combo = glade_xml_get_widget(xml, "date_format_combobox");
- retval->selected_file_view = glade_xml_get_widget(xml, "selected_file_view");
- retval->currency_picker = glade_xml_get_widget(xml, "currency_comboboxentry");
- retval->acct_view = glade_xml_get_widget(xml, "account_page_view");
- retval->acct_view_count = glade_xml_get_widget(xml, "account_page_count");
- retval->acct_view_btn = glade_xml_get_widget(xml, "account_page_change");
- retval->cat_view = glade_xml_get_widget(xml, "category_page_view");
- retval->cat_view_count = glade_xml_get_widget(xml, "category_page_count");
- retval->cat_view_btn = glade_xml_get_widget(xml, "category_page_change");
- retval->memo_view = glade_xml_get_widget(xml, "memo_page_view");
- retval->memo_view_count = glade_xml_get_widget(xml, "memo_page_count");
- retval->memo_view_btn = glade_xml_get_widget(xml, "memo_page_change");
- retval->convert_pause = glade_xml_get_widget(xml, "convert_progress_pause");
- retval->convert_log = glade_xml_get_widget(xml, "convert_progress_log");
- retval->convert_progress = gnc_progress_dialog_custom(
- GTK_LABEL(glade_xml_get_widget(xml, "convert_progress_primary")),
- GTK_LABEL(glade_xml_get_widget(xml, "convert_progress_secondary")),
- GTK_PROGRESS_BAR(glade_xml_get_widget(xml, "convert_progress_bar")),
- GTK_LABEL(glade_xml_get_widget(xml, "convert_progress_sub")),
- GTK_TEXT_VIEW(retval->convert_log));
- retval->new_transaction_view =
- glade_xml_get_widget(xml, "new_transaction_view");
- retval->old_transaction_view =
- glade_xml_get_widget(xml, "old_transaction_view");
+static void
+build_views(QIFImportWindow *wind)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
- retval->pre_comm_pages = NULL;
- retval->post_comm_pages = NULL;
- retval->doc_pages = NULL;
- retval->commodity_pages = NULL;
+ g_return_if_fail(wind);
- /* Get the user's preference for showing documentation pages. */
- retval->show_doc_pages =
- gnc_gconf_get_bool(GCONF_SECTION, GCONF_NAME_SHOW_DOC, &err);
- if (err != NULL) {
- g_warning("QIF import: gnc_gconf_get_bool error: %s", err->message);
- g_error_free(err);
-
- /* Show documentation pages by default. */
- g_warning("QIF import: Couldn't get %s setting from gconf.",
- GCONF_NAME_SHOW_DOC);
- g_warning("QIF import: Documentation pages will be shown by default.");
- retval->show_doc_pages = TRUE;
- }
-
- for(i=0; i < NUM_PRE_PAGES; i++) {
- retval->pre_comm_pages =
- g_list_append(retval->pre_comm_pages,
- glade_xml_get_widget(xml, pre_page_names[i]));
- }
- for(i=0; i < NUM_POST_PAGES; i++) {
- retval->post_comm_pages =
- g_list_append(retval->post_comm_pages,
- glade_xml_get_widget(xml, post_page_names[i]));
- }
- for(i=0; i < NUM_DOC_PAGES; i++) {
- retval->doc_pages =
- g_list_append(retval->doc_pages,
- glade_xml_get_widget(xml, doc_page_names[i]));
- }
-
/* Set up the selected file view */
- view = GTK_TREE_VIEW(retval->selected_file_view);
+ view = GTK_TREE_VIEW(wind->selected_file_view);
store = gtk_list_store_new(NUM_FILENAME_COLS, G_TYPE_INT, G_TYPE_STRING);
gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
g_object_unref(store);
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Account"),
+ column = gtk_tree_view_column_new_with_attributes("unused",
renderer,
"text",
FILENAME_COL_NAME,
@@ -3425,28 +3512,28 @@
selection = gtk_tree_view_get_selection(view);
g_signal_connect(selection, "changed",
G_CALLBACK(gnc_ui_qif_import_select_loaded_file_cb),
- retval);
+ wind);
/* Set up the QIF account to GnuCash account matcher. */
- create_account_picker_view(retval->acct_view, _("QIF account name"),
+ create_account_picker_view(wind->acct_view, _("QIF account name"),
G_CALLBACK(gnc_ui_qif_import_account_activate_cb),
G_CALLBACK(gnc_ui_qif_import_account_select_cb),
- retval);
+ wind);
/* Set up the QIF category to GnuCash account matcher. */
- create_account_picker_view(retval->cat_view, _("QIF category name"),
+ create_account_picker_view(wind->cat_view, _("QIF category name"),
G_CALLBACK(gnc_ui_qif_import_category_activate_cb),
G_CALLBACK(gnc_ui_qif_import_category_select_cb),
- retval);
+ wind);
/* Set up the QIF payee/memo to GnuCash account matcher. */
- create_account_picker_view(retval->memo_view, _("QIF payee/memo"),
+ create_account_picker_view(wind->memo_view, _("QIF payee/memo"),
G_CALLBACK(gnc_ui_qif_import_memo_activate_cb),
G_CALLBACK(gnc_ui_qif_import_memo_select_cb),
- retval);
+ wind);
/* Set up the new transaction view */
- view = GTK_TREE_VIEW(retval->new_transaction_view);
+ view = GTK_TREE_VIEW(wind->new_transaction_view);
store = gtk_list_store_new(NUM_QIF_TRANS_COLS, G_TYPE_INT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
@@ -3480,11 +3567,11 @@
selection = gtk_tree_view_get_selection(view);
g_signal_connect(selection, "changed",
G_CALLBACK(gnc_ui_qif_import_duplicate_new_select_cb),
- retval);
+ wind);
/* Set up the old transaction view */
- view = GTK_TREE_VIEW(retval->old_transaction_view);
+ view = GTK_TREE_VIEW(wind->old_transaction_view);
store = gtk_list_store_new(NUM_QIF_TRANS_COLS, G_TYPE_INT, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
@@ -3526,58 +3613,90 @@
selection = gtk_tree_view_get_selection(view);
g_signal_connect(selection, "changed",
G_CALLBACK(gnc_ui_qif_import_duplicate_old_select_cb),
- retval);
+ wind);
+}
- /* load the saved-state of the mappings from Quicken accounts and
- * categories to gnucash accounts */
- load_map_prefs = scm_c_eval_string("qif-import:load-map-prefs");
+/********************************************************************
+ * gnc_ui_qif_import_druid_make
+ *
+ * Build a new QIF import druid.
+ ********************************************************************/
- mapping_info = scm_call_0(load_map_prefs);
- retval->gnc_acct_info = scm_list_ref(mapping_info, scm_int2num(0));
- retval->acct_map_info = scm_list_ref(mapping_info, scm_int2num(1));
- retval->cat_map_info = scm_list_ref(mapping_info, scm_int2num(2));
- retval->memo_map_info = scm_list_ref(mapping_info, scm_int2num(3));
- retval->security_hash = scm_list_ref(mapping_info, scm_int2num(4));
- retval->security_prefs = scm_list_ref(mapping_info, scm_int2num(5));
+QIFImportWindow *
+gnc_ui_qif_import_druid_make(void)
+{
+ QIFImportWindow * wind;
+ GladeXML * xml;
- create_ticker_map = scm_c_eval_string("make-ticker-map");
- retval->ticker_map = scm_call_0(create_ticker_map);
+ /* Allocate space for the druid and load its design. */
+ wind = g_new0(QIFImportWindow, 1);
+ xml = gnc_glade_xml_new("qif.glade", "QIF Import Druid");
- scm_gc_protect_object(retval->imported_files);
- scm_gc_protect_object(retval->selected_file);
- scm_gc_protect_object(retval->gnc_acct_info);
- scm_gc_protect_object(retval->cat_display_info);
- scm_gc_protect_object(retval->cat_map_info);
- scm_gc_protect_object(retval->memo_display_info);
- scm_gc_protect_object(retval->memo_map_info);
- scm_gc_protect_object(retval->acct_display_info);
- scm_gc_protect_object(retval->acct_map_info);
- scm_gc_protect_object(retval->security_hash);
- scm_gc_protect_object(retval->security_prefs);
- scm_gc_protect_object(retval->new_securities);
- scm_gc_protect_object(retval->ticker_map);
- scm_gc_protect_object(retval->imported_account_tree);
- scm_gc_protect_object(retval->match_transactions);
+ wind->new_namespaces = NULL;
+ wind->selected_transaction = 0;
+ wind->busy = FALSE;
- /* set a default currency for new accounts */
- gnc_cbe_require_list_item(GTK_COMBO_BOX_ENTRY(retval->currency_picker));
- gnc_ui_update_commodity_picker(retval->currency_picker,
+ /* Get all user preferences related to QIF importing. */
+ get_preferences(wind);
+
+ /* Set up the Scheme side of things. */
+ initialize_scheme(wind);
+
+ /* Build lists of the druid pages. */
+ build_page_lists(wind, xml);
+
+ /* Get all interesting glade-defined widgets. */
+ get_glade_widgets(wind, xml);
+
+ /* Connect all glade-defined signals to their handlers. */
+ connect_glade_signals(wind, xml);
+
+ /* Build the details of all GtkTreeView widgets. */
+ build_views(wind);
+
+ /* Set a default currency for new accounts */
+ gnc_cbe_require_list_item(GTK_COMBO_BOX_ENTRY(wind->currency_picker));
+ gnc_ui_update_commodity_picker(wind->currency_picker,
GNC_COMMODITY_NS_CURRENCY,
- gnc_commodity_get_printname
- (gnc_default_currency()));
+ gnc_commodity_get_printname(
+ gnc_default_currency()));
- if(!retval->show_doc_pages) {
- gnome_druid_set_page(GNOME_DRUID(retval->druid),
- get_named_page(retval, "load_file_page"));
- }
+ /* If desired, skip the initial documentation pages. */
+ if (!wind->show_doc_pages)
+ gnome_druid_set_page(GNOME_DRUID(wind->druid),
+ get_named_page(wind, "load_file_page"));
- gnc_druid_set_colors(GNOME_DRUID(retval->druid));
+ gnc_druid_set_colors(GNOME_DRUID(wind->druid));
- gnc_register_gui_component(DRUID_QIF_IMPORT_CM_CLASS, NULL, NULL, retval);
+ gnc_register_gui_component(DRUID_QIF_IMPORT_CM_CLASS, NULL, NULL, wind);
- gtk_widget_show_all(retval->window);
- gtk_window_present(GTK_WINDOW(retval->window));
+ gtk_widget_show_all(wind->window);
+ gtk_window_present(GTK_WINDOW(wind->window));
- return retval;
+ return wind;
}
+
+
+static gboolean
+show_handler(const char *class, gint component_id,
+ gpointer user_data, gpointer iter_data)
+{
+ QIFImportWindow *qif_win = user_data;
+
+ if (!qif_win)
+ return(FALSE);
+ gtk_window_present(GTK_WINDOW(qif_win->window));
+ return(TRUE);
+}
+
+void
+gnc_file_qif_import(void)
+{
+ if (gnc_forall_gui_components(DRUID_QIF_IMPORT_CM_CLASS,
+ show_handler, NULL))
+ return;
+
+ /* pop up the QIF File Import dialog box */
+ gnc_ui_qif_import_druid_make();
+}
More information about the gnucash-changes
mailing list