]> git.street.me.uk Git - andy/viking.git/commitdiff
Gpslayer: New menu items to remove all tracks and waypoints in GPS folders.
authorQuy Tonthat <qtonthat@gmail.com>
Wed, 23 May 2007 07:20:54 +0000 (07:20 +0000)
committerQuy Tonthat <qtonthat@gmail.com>
Wed, 23 May 2007 07:20:54 +0000 (07:20 +0000)
Data in Gps folders are likely short lived. Old data are often removed
before upload/download operation. The new menu items
(empty upload, empty download, empty all) are to make the task of
cleaning up the folders less painful (now that gps data are saved
and there is multiple selection is not yet implemented).

Signed-off-by: Quy Tonthat <qtonthat@gmail.com>
src/vikgpslayer.c
src/viktrwlayer.c
src/viktrwlayer.h

index 1928015cfb5f787e8e5ef8c8188eebef889cb9f4..b394deedf2003a50d8e728ea6cefb48beb3e5bf1 100644 (file)
@@ -47,6 +47,9 @@ static void gps_layer_drag_drop_request ( VikGpsLayer *val_src, VikGpsLayer *val
 
 static void gps_upload_cb( gpointer layer_and_vlp[2] );
 static void gps_download_cb( gpointer layer_and_vlp[2] );
+static void gps_empty_upload_cb( gpointer layer_and_vlp[2] );
+static void gps_empty_download_cb( gpointer layer_and_vlp[2] );
+static void gps_empty_all_cb( gpointer layer_and_vlp[2] );
 
 typedef enum {GARMIN_P = 0, MAGELLAN_P, NUM_PROTOCOLS} vik_gps_proto;
 static gchar * params_protocols[] = {"Garmin", "Magellan", NULL};
@@ -353,6 +356,25 @@ static void gps_layer_add_menu_items( VikGpsLayer *vgl, GtkMenu *menu, gpointer
   gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
   gtk_widget_show ( item );
 
+  item = gtk_menu_item_new();
+  gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item );
+  gtk_widget_show ( item );
+
+  item = gtk_menu_item_new_with_label ( "Empty Upload" );
+  g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_upload_cb), pass_along );
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  gtk_widget_show ( item );
+
+  item = gtk_menu_item_new_with_label ( "Empty Download" );
+  g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_download_cb), pass_along );
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  gtk_widget_show ( item );
+
+  item = gtk_menu_item_new_with_label ( "Empty All" );
+  g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(gps_empty_all_cb), pass_along );
+  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+  gtk_widget_show ( item );
+
 }
 
 static void disconnect_layer_signal ( VikLayer *vl, VikGpsLayer *vgl )
@@ -806,3 +828,26 @@ static void gps_download_cb( gpointer layer_and_vlp[2] )
   VikTrwLayer *vtl = vgl->trw_children[TRW_DOWNLOAD];
   gps_comm(vtl, GPS_DOWN, vgl->protocol_id, params_ports[vgl->serial_port_id]);
 }
+
+static void gps_empty_upload_cb( gpointer layer_and_vlp[2] )
+{
+  VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0];
+  vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_UPLOAD]);
+  vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_UPLOAD]);
+}
+
+static void gps_empty_download_cb( gpointer layer_and_vlp[2] )
+{
+  VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0];
+  vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_DOWNLOAD]);
+  vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_DOWNLOAD]);
+}
+
+static void gps_empty_all_cb( gpointer layer_and_vlp[2] )
+{
+  VikGpsLayer *vgl = (VikGpsLayer *)layer_and_vlp[0];
+  vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_UPLOAD]);
+  vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_UPLOAD]);
+  vik_trw_layer_delete_all_waypoints ( vgl-> trw_children[TRW_DOWNLOAD]);
+  vik_trw_layer_delete_all_tracks ( vgl-> trw_children[TRW_DOWNLOAD]);
+}
index f5b182b3355305e71a6db9f2f294ceadfee4d9d9..d1599671aa2f81bdcb7da55a282843b5ea6c37cf 100644 (file)
@@ -1810,6 +1810,42 @@ gboolean vik_trw_layer_delete_waypoint ( VikTrwLayer *vtl, const gchar *wp_name
   return was_visible;
 }
 
+static void remove_item_from_treeview(const gchar *name, GtkTreeIter *it, VikTreeview * vt)
+{
+    vik_treeview_item_delete (vt, it );
+}
+
+void vik_trw_layer_delete_all_tracks ( VikTrwLayer *vtl )
+{
+
+  vtl->current_track = NULL;
+  if (vtl->current_tp_track_name)
+    trw_layer_cancel_current_tp(vtl, FALSE);
+  if (vtl->last_tp_track_name)
+    trw_layer_cancel_last_tp ( vtl );
+
+  g_hash_table_foreach(vtl->tracks_iters, (GHFunc) remove_item_from_treeview, VIK_LAYER(vtl)->vt);
+  g_hash_table_remove_all(vtl->tracks_iters);
+  g_hash_table_remove_all(vtl->tracks);
+
+  /* TODO: only update if the layer is visible (ticked) */
+  vik_layer_emit_update ( VIK_LAYER(vtl) );
+}
+
+void vik_trw_layer_delete_all_waypoints ( VikTrwLayer *vtl )
+{
+  vtl->current_wp = NULL;
+  vtl->current_wp_name = NULL;
+  vtl->moving_wp = FALSE;
+
+  g_hash_table_foreach(vtl->waypoints_iters, (GHFunc) remove_item_from_treeview, VIK_LAYER(vtl)->vt);
+  g_hash_table_remove_all(vtl->waypoints_iters);
+  g_hash_table_remove_all(vtl->waypoints);
+
+  /* TODO: only update if the layer is visible (ticked) */
+  vik_layer_emit_update ( VIK_LAYER(vtl) );
+}
+
 static void trw_layer_delete_item ( gpointer pass_along[5] )
 {
   VikTrwLayer *vtl = VIK_TRW_LAYER(pass_along[0]);
index db0d6544faa9bb34bd0530c672ab86d2054839f5..e784913a850f42a877721095b2d44cb7a75e414b 100644 (file)
@@ -78,5 +78,6 @@ gboolean vik_trw_layer_new_waypoint ( VikTrwLayer *vtl, GtkWindow *w, const VikC
 
 VikCoordMode vik_trw_layer_get_coord_mode ( VikTrwLayer *vtl );
 
+void vik_trw_layer_delete_all_waypoints ( VikTrwLayer *vtl );
 
 #endif