- gdk_threads_enter();
- if (source_interface->mode == VIK_DATASOURCE_ADDTOLAYER) {
- VikLayer *current_selected = vik_layers_panel_get_selected ( w->vlp );
- if ( IS_VIK_TRW_LAYER(current_selected) ) {
- vtl = VIK_TRW_LAYER(current_selected);
- creating_new_layer = FALSE;
- }
- }
- if ( creating_new_layer ) {
- vtl = VIK_TRW_LAYER ( vik_layer_create ( VIK_LAYER_TRW, w->vvp, NULL, FALSE ) );
- vik_layer_rename ( VIK_LAYER ( vtl ), _(source_interface->layer_title) );
- gtk_label_set_text ( GTK_LABEL(w->status), _("Working...") );
- }
- gdk_threads_leave();
-
- // TODO consider removing 'type' and make everything run via the specficied process function
- switch ( source_interface->type ) {
- case VIK_DATASOURCE_GPSBABEL_DIRECT:
- result = a_babel_convert_from (vtl, cmd, extra, (BabelStatusFunc) progress_func, w);
- break;
- case VIK_DATASOURCE_URL:
- result = a_babel_convert_from_url (vtl, cmd, extra, (BabelStatusFunc) progress_func, w);
- break;
- case VIK_DATASOURCE_SHELL_CMD:
- result = a_babel_convert_from_shellcommand ( vtl, cmd, extra, (BabelStatusFunc) progress_func, w);
- break;
- case VIK_DATASOURCE_INTERNAL:
- if ( source_interface->process_func )
- result = source_interface->process_func ( vtl, cmd, extra, (BabelStatusFunc) progress_func, w );
- break;
- default:
- g_critical("Houston, we've had a problem.");
- }