X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/07493583d2fd49343128488217fd19ddfc29eaad..f3c798e9818e701f4db1819debe30c3771f38542:/src/acquire.c diff --git a/src/acquire.c b/src/acquire.c index 1a65e91f..1a17895f 100644 --- a/src/acquire.c +++ b/src/acquire.c @@ -56,7 +56,6 @@ const VikDataSourceInterface *filters[] = { const guint N_FILTERS = sizeof(filters) / sizeof(filters[0]); VikTrack *filter_track = NULL; -gchar *filter_track_name = NULL; /********************************************************/ @@ -119,9 +118,10 @@ static void get_from_anything ( w_and_interface_t *wi ) } 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, (BabelStatusFunc) progress_func, extra, w); + 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); @@ -129,6 +129,10 @@ static void get_from_anything ( w_and_interface_t *wi ) 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."); } @@ -150,8 +154,10 @@ static void get_from_anything ( w_and_interface_t *wi ) if ( creating_new_layer ) { /* Only create the layer if it actually contains anything useful */ if ( g_hash_table_size (vik_trw_layer_get_tracks(vtl)) || - g_hash_table_size (vik_trw_layer_get_waypoints(vtl)) ) + g_hash_table_size (vik_trw_layer_get_waypoints(vtl)) ) { + vik_layer_post_read ( VIK_LAYER(vtl), w->vvp, TRUE ); vik_aggregate_layer_add_layer( vik_layers_panel_get_top_layer(w->vlp), VIK_LAYER(vtl)); + } else gtk_label_set_text ( GTK_LABEL(w->status), _("No data.") ); } @@ -193,7 +199,7 @@ static gchar *write_tmp_trwlayer ( VikTrwLayer *vtl ) FILE *f; g_assert ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0); f = fdopen(fd_src, "w"); - a_gpx_write_file(vtl, f); + a_gpx_write_file(vtl, f, NULL); fclose(f); f = NULL; return name_src; @@ -207,7 +213,7 @@ static gchar *write_tmp_track ( VikTrack *track ) FILE *f; g_assert ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0); f = fdopen(fd_src, "w"); - a_gpx_write_track_file("track", track, f); /* Thank you Guilhem! Just when I needed this function... -- Evan */ + a_gpx_write_track_file(track, f, NULL); /* Thank you Guilhem! Just when I needed this function... -- Evan */ fclose(f); f = NULL; return name_src; @@ -224,7 +230,8 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD /* for manual dialogs */ GtkWidget *dialog = NULL; GtkWidget *status; - gchar *cmd, *extra; + gchar *cmd = NULL; + gchar *extra = NULL; gchar *cmd_off = NULL; gchar *extra_off = NULL; acq_dialog_widgets_t *w; @@ -315,8 +322,8 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD ( pass_along_data, &cmd, &extra, name_src_track ); g_free ( name_src_track ); - } else - source_interface->get_cmd_string_func ( pass_along_data, &cmd, &extra ); + } else if ( source_interface->get_cmd_string_func ) + source_interface->get_cmd_string_func ( pass_along_data, &cmd, &extra ); /* Get data for Off command */ if ( source_interface->off_func ) { @@ -373,7 +380,7 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD else { if ( cmd_off ) { /* Turn off */ - a_babel_convert_from (NULL, cmd_off, NULL, extra_off, NULL); + a_babel_convert_from (NULL, cmd_off, extra_off, NULL, NULL); } g_free ( w ); /* thread has finished; free w */ } @@ -440,7 +447,7 @@ GtkWidget *a_acquire_trwlayer_track_menu (VikWindow *vw, VikLayersPanel *vlp, Vi if ( filter_track == NULL ) return NULL; else { - gchar *menu_title = g_strdup_printf ( "Filter with %s", filter_track_name ); + gchar *menu_title = g_strdup_printf ( "Filter with %s", filter_track->name ); GtkWidget *rv = acquire_build_menu ( vw, vlp, vvp, vtl, filter_track, menu_title, VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK ); g_free ( menu_title ); @@ -453,15 +460,11 @@ GtkWidget *a_acquire_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport return acquire_build_menu ( vw, vlp, vvp, NULL, tr, "Filter", VIK_DATASOURCE_INPUTTYPE_TRACK ); } -void a_acquire_set_filter_track ( VikTrack *tr, const gchar *name ) +void a_acquire_set_filter_track ( VikTrack *tr ) { if ( filter_track ) vik_track_free ( filter_track ); - if ( filter_track_name ) - g_free ( filter_track_name ); filter_track = tr; vik_track_ref ( tr ); - - filter_track_name = g_strdup(name); }