]> git.street.me.uk Git - andy/viking.git/blobdiff - src/acquire.c
Fix compiler warning in curl_download.c
[andy/viking.git] / src / acquire.c
index c72330b24b8d9793de2353d52060b6c4e381a9f4..67d1771d11ba676eca15c603199e16a6eec57684 100644 (file)
@@ -94,7 +94,7 @@ static void get_from_anything ( w_and_interface_t *wi )
 {
   gchar *cmd = wi->cmd;
   gchar *extra = wi->extra;
-  gboolean result;
+  gboolean result = TRUE;
   VikTrwLayer *vtl;
 
   gboolean creating_new_layer = TRUE;
@@ -147,8 +147,14 @@ static void get_from_anything ( w_and_interface_t *wi )
     gdk_threads_enter();
     if (w->ok) {
       gtk_label_set_text ( GTK_LABEL(w->status), _("Done.") );
-      if ( creating_new_layer )
-       vik_aggregate_layer_add_layer( vik_layers_panel_get_top_layer(w->vlp), VIK_LAYER(vtl));
+      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)) )
+         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.") );
+      }
       if ( source_interface->keep_dialog_open ) {
         gtk_dialog_set_response_sensitive ( GTK_DIALOG(w->dialog), GTK_RESPONSE_ACCEPT, TRUE );
         gtk_dialog_set_response_sensitive ( GTK_DIALOG(w->dialog), GTK_RESPONSE_REJECT, FALSE );
@@ -214,6 +220,8 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD
   GtkWidget *dialog = NULL;
   GtkWidget *status;
   gchar *cmd, *extra;
+  gchar *cmd_off = NULL;
+  gchar *extra_off = NULL;
   acq_dialog_widgets_t *w;
   gpointer user_data;
 
@@ -246,9 +254,18 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD
   if ( source_interface->add_setup_widgets_func ) {
     dialog = gtk_dialog_new_with_buttons ( "", GTK_WINDOW(vw), 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL );
 
+    gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT );
+    GtkWidget *response_w = NULL;
+#if GTK_CHECK_VERSION (2, 20, 0)
+    response_w = gtk_dialog_get_widget_for_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT );
+#endif
+
     source_interface->add_setup_widgets_func(dialog, vvp, user_data);
     gtk_window_set_title ( GTK_WINDOW(dialog), _(source_interface->window_title) );
 
+    if ( response_w )
+      gtk_widget_grab_focus ( response_w );
+
     if ( gtk_dialog_run ( GTK_DIALOG(dialog) ) != GTK_RESPONSE_ACCEPT ) {
       source_interface->cleanup_func(user_data);
       gtk_widget_destroy(dialog);
@@ -257,7 +274,7 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD
   }
   /* POSSIBILITY 2: UI BUILDER */
   else if ( source_interface->params ) {
-    paramdatas = a_uibuilder_run_dialog ( GTK_WINDOW(vw),
+    paramdatas = a_uibuilder_run_dialog ( source_interface->window_title, GTK_WINDOW(vw),
                        source_interface->params, source_interface->params_count,
                        source_interface->params_groups, source_interface->params_groups_count,
                        source_interface->params_defaults );
@@ -296,6 +313,11 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD
   } else
     source_interface->get_cmd_string_func ( pass_along_data, &cmd, &extra );
 
+  /* Get data for Off command */
+  if ( source_interface->off_func ) {
+    source_interface->off_func ( pass_along_data, &cmd_off, &extra_off );
+  }
+
   /* cleanup for option dialogs */
   if ( source_interface->add_setup_widgets_func ) {
     gtk_widget_destroy(dialog);
@@ -325,6 +347,7 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD
   w->ok = TRUE;
   status = gtk_label_new (_("Status: detecting gpsbabel"));
   gtk_box_pack_start ( GTK_BOX(GTK_DIALOG(dialog)->vbox), status, FALSE, FALSE, 5 );
+  gtk_dialog_set_default_response ( GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT );
   gtk_widget_show_all(status);
   w->status = status;
 
@@ -343,6 +366,10 @@ static void acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikD
   if ( w->ok )
     w->ok = FALSE; /* tell thread to stop. TODO: add mutex */
   else {
+    if ( cmd_off ) {
+      /* Turn off */
+      a_babel_convert_from (NULL, cmd_off, NULL, extra_off, NULL);
+    }
     g_free ( w ); /* thread has finished; free w */
   }
   gtk_widget_destroy ( dialog );
@@ -368,7 +395,7 @@ static GtkWidget *acquire_build_menu ( VikWindow *vw, VikLayersPanel *vlp, VikVi
                                VikTrwLayer *vtl, VikTrack *track, /* both passed to acquire, although for many filters only one ness */
                                const gchar *menu_title, vik_datasource_inputtype_t inputtype )
 {
-  static gpointer pass_along[4];
+  static gpointer pass_along[5];
   GtkWidget *menu_item=NULL, *menu=NULL;
   GtkWidget *item=NULL;
   int i;
@@ -383,7 +410,7 @@ static GtkWidget *acquire_build_menu ( VikWindow *vw, VikLayersPanel *vlp, VikVi
     if ( filters[i]->inputtype == inputtype ) {
       if ( ! menu_item ) { /* do this just once, but return NULL if no filters */
         menu = gtk_menu_new();
-        menu_item = gtk_menu_item_new_with_label ( menu_title );
+        menu_item = gtk_menu_item_new_with_mnemonic ( menu_title );
         gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu );
       }
 
@@ -400,7 +427,7 @@ static GtkWidget *acquire_build_menu ( VikWindow *vw, VikLayersPanel *vlp, VikVi
 
 GtkWidget *a_acquire_trwlayer_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl)
 {
-  return acquire_build_menu ( vw, vlp, vvp, vtl, NULL, "Filter", VIK_DATASOURCE_INPUTTYPE_TRWLAYER );
+  return acquire_build_menu ( vw, vlp, vvp, vtl, NULL, "_Filter", VIK_DATASOURCE_INPUTTYPE_TRWLAYER );
 }
 
 GtkWidget *a_acquire_trwlayer_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl)