* viking -- GPS Data and Topo Analyzer, Explorer, and Manager
*
* Copyright (C) 2011, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
+ * Copyright (C) 2015, Rob Norris <rw_norris@hotmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "viking.h"
#include "babel.h"
#include "gpx.h"
+#include "babel_ui.h"
#include "acquire.h"
typedef struct {
/* 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, gpointer not_used );
+static void datasource_file_get_process_options ( datasource_file_widgets_t *widgets, ProcessOptions *po, gpointer not_used, const gchar *not_used2, const gchar *not_used3 );
static void datasource_file_cleanup ( gpointer data );
VikDataSourceInterface vik_datasource_file_interface = {
N_("Import file with GPSBabel"),
N_("Imported file"),
- VIK_DATASOURCE_ADDTOLAYER,
+ VIK_DATASOURCE_AUTO_LAYER_MANAGEMENT,
VIK_DATASOURCE_INPUTTYPE_NONE,
TRUE,
TRUE,
(VikDataSourceInitFunc) datasource_file_init,
(VikDataSourceCheckExistenceFunc) NULL,
(VikDataSourceAddSetupWidgetsFunc) datasource_file_add_setup_widgets,
- (VikDataSourceGetCmdStringFunc) datasource_file_get_cmd_string,
- (VikDataSourceProcessFunc) a_babel_convert_from,
+ (VikDataSourceGetProcessOptionsFunc) datasource_file_get_process_options,
+ (VikDataSourceProcessFunc) a_babel_convert_from,
(VikDataSourceProgressFunc) NULL,
(VikDataSourceAddProgressWidgetsFunc) NULL,
(VikDataSourceCleanupFunc) datasource_file_cleanup,
(VikDataSourceOffFunc) NULL,
+
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ 0
};
/* 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 );
/* 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 any 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, gpointer not_used )
+static void datasource_file_get_process_options ( datasource_file_widgets_t *widgets, ProcessOptions *po, gpointer not_used, const gchar *not_used2, const gchar *not_used3 )
{
/* Retrieve the file selected */
gchar *filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(widgets->file) );
/* Memorize the directory for later use */
g_free (last_folder_uri);
last_folder_uri = gtk_file_chooser_get_current_folder_uri ( GTK_FILE_CHOOSER(widgets->file) );
- last_folder_uri = g_strdup (last_folder_uri);
/* Memorize the file filter for later use */
GtkFileFilter *filter = gtk_file_chooser_get_filter ( GTK_FILE_CHOOSER(widgets->file) );
/* Retrieve and memorize file format selected */
gchar *type = NULL;
last_type = gtk_combo_box_get_active ( GTK_COMBO_BOX (widgets->type) );
- if ( a_babel_file_list )
- 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);
- *input_file = g_strdup(filename);
+ /* Generate the process options */
+ po->babelargs = g_strdup_printf( "-i %s", type);
+ po->filename = g_strdup(filename);
/* Free memory */
g_free (filename);
- g_debug(_("using babel args '%s' and file '%s'"), *cmd, *input_file);
+ g_debug(_("using babel args '%s' and file '%s'"), po->babelargs, po->filename);
}
/* See VikDataSourceInterface */