X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/f63ca925baa9bd8b9d9d346cb6be00268ed14269..23d6216c871ca648a093bd992f25fd9ce18f971d:/src/datasource_file.c diff --git a/src/datasource_file.c b/src/datasource_file.c index 1b4daeae..27da820a 100644 --- a/src/datasource_file.c +++ b/src/datasource_file.c @@ -31,6 +31,7 @@ #include "viking.h" #include "babel.h" #include "gpx.h" +#include "babel_ui.h" #include "acquire.h" typedef struct { @@ -50,24 +51,24 @@ static BabelFile *last_file_filter = NULL; /* The last file format selected */ static int last_type = 0; -static gpointer datasource_file_init( ); +static gpointer datasource_file_init ( acq_vik_t *avt ); static void datasource_file_add_setup_widgets ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); -static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, gchar **cmd, gchar **input_file_type ); +static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, gchar **cmd, gchar **input_file_type, gpointer not_used ); static void datasource_file_cleanup ( gpointer data ); VikDataSourceInterface vik_datasource_file_interface = { N_("Import file with GPSBabel"), N_("Imported file"), - VIK_DATASOURCE_GPSBABEL_DIRECT, VIK_DATASOURCE_ADDTOLAYER, VIK_DATASOURCE_INPUTTYPE_NONE, TRUE, TRUE, + TRUE, (VikDataSourceInitFunc) datasource_file_init, (VikDataSourceCheckExistenceFunc) NULL, (VikDataSourceAddSetupWidgetsFunc) datasource_file_add_setup_widgets, (VikDataSourceGetCmdStringFunc) datasource_file_get_cmd_string, - (VikDataSourceProcessFunc) NULL, + (VikDataSourceProcessFunc) a_babel_convert_from, (VikDataSourceProgressFunc) NULL, (VikDataSourceAddProgressWidgetsFunc) NULL, (VikDataSourceCleanupFunc) datasource_file_cleanup, @@ -75,24 +76,12 @@ VikDataSourceInterface vik_datasource_file_interface = { }; /* See VikDataSourceInterface */ -static gpointer datasource_file_init ( ) +static gpointer datasource_file_init ( acq_vik_t *avt ) { datasource_file_widgets_t *widgets = g_malloc(sizeof(*widgets)); return widgets; } -static void fill_combo_box (gpointer data, gpointer user_data) -{ - const gchar *label = ((BabelFile*) data)->label; -#if GTK_CHECK_VERSION (2,24,0) - GtkComboBoxText *combo = GTK_COMBO_BOX_TEXT (user_data); - gtk_combo_box_text_append_text (combo, label); -#else - GtkComboBox *combo = GTK_COMBO_BOX (user_data); - gtk_combo_box_append_text (combo, label); -#endif -} - static void add_file_filter (gpointer data, gpointer user_data) { GtkFileChooser *chooser = GTK_FILE_CHOOSER ( user_data ); @@ -146,29 +135,29 @@ static void datasource_file_add_setup_widgets ( GtkWidget *dialog, VikViewport * /* The file format selector */ type_label = gtk_label_new (_("File type:")); -#if GTK_CHECK_VERSION (2,24,0) - widgets->type = gtk_combo_box_text_new (); -#else - widgets->type = gtk_combo_box_new_text (); -#endif - g_list_foreach (a_babel_file_list, fill_combo_box, widgets->type); - gtk_combo_box_set_active (GTK_COMBO_BOX (widgets->type), last_type); + /* Propose all readable file */ + BabelMode mode = { 1, 0, 1, 0, 1, 0 }; + widgets->type = a_babel_ui_file_type_selector_new ( mode ); + g_signal_connect ( G_OBJECT(widgets->type), "changed", + G_CALLBACK(a_babel_ui_type_selector_dialog_sensitivity_cb), dialog ); + gtk_combo_box_set_active ( GTK_COMBO_BOX(widgets->type), last_type ); + /* Manually call the callback to fix the state */ + a_babel_ui_type_selector_dialog_sensitivity_cb ( GTK_COMBO_BOX(widgets->type), dialog ); /* Packing all these widgets */ - gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), filename_label, FALSE, FALSE, 5 ); - gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->file, FALSE, FALSE, 5 ); - gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), type_label, FALSE, FALSE, 5 ); - gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), widgets->type, FALSE, FALSE, 5 ); + GtkBox *box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); + gtk_box_pack_start ( box, filename_label, FALSE, FALSE, 5 ); + gtk_box_pack_start ( box, widgets->file, FALSE, FALSE, 5 ); + gtk_box_pack_start ( box, type_label, FALSE, FALSE, 5 ); + gtk_box_pack_start ( box, widgets->type, FALSE, FALSE, 5 ); gtk_widget_show_all(dialog); } /* See VikDataSourceInterface */ -static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, gchar **cmd, gchar **input_file ) +static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, gchar **cmd, gchar **input_file, gpointer not_used ) { - gchar *filename, *type; - /* Retrieve the file selected */ - filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(widgets->file) ); + gchar *filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(widgets->file) ); /* Memorize the directory for later use */ g_free (last_folder_uri); @@ -180,8 +169,9 @@ static void datasource_file_get_cmd_string ( datasource_file_widgets_t *widgets, last_file_filter = g_object_get_data ( G_OBJECT(filter), "Babel" ); /* Retrieve and memorize file format selected */ + gchar *type = NULL; last_type = gtk_combo_box_get_active ( GTK_COMBO_BOX (widgets->type) ); - type = ((BabelFile*)g_list_nth_data (a_babel_file_list, last_type))->name; + type = (a_babel_ui_file_type_selector_get ( widgets->type ))->name; /* Build the string */ *cmd = g_strdup_printf( "-i %s", type);