]> git.street.me.uk Git - andy/viking.git/commitdiff
Name resolution for pasting wps&tracks
authorEvan Battaglia <gtoevan@gmx.net>
Thu, 6 Oct 2005 06:35:46 +0000 (06:35 +0000)
committerEvan Battaglia <gtoevan@gmx.net>
Thu, 6 Oct 2005 06:35:46 +0000 (06:35 +0000)
ChangeLog
TODO
src/clipboard.c
src/clipboard.h
src/main.c
src/viktrwlayer.c

index 7111cad04b2b3f3c8a51212a7c695ac2f359352e..fa8532ecdbe54fae36477766078415987d260324 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-05
+Alex Foobarian <foobarian@gmail.com>:
+       * Change clipboard so as to use GTKClipboard. Prepare for support for pasting coordinates, etc.
+Evan Battaglia <gtoevan@gmx.net>:
+       * When pasting waypoints and tracks, do name resolution (add #2, etc)
+
 2005-10-01
 Evan Battaglia <gtoevan@gmx.net>:
        * make symbols work for geocaching .loc files (and case-insensitive symbol names)
diff --git a/TODO b/TODO
index 6e7cfb772c1e077571033b8df2c87460918f787c..a3b1f5e57879e67d96548e7fbb3a5b98f178122f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,10 +1,29 @@
+clipboard ideas:
+----------------------------
+option 1) use gtkclipboard for pasting what we can; use internal clipboard
+         for viking data. viking data isn't useful to other programs.
+
+option 2) use gtkclipboard for viking data. if I try to paste viking data as
+         text, this can do something useful, depending on the layer. it can
+         paste as GPX if you copy a track, waypoint, or whole viktrwlayer.
+         other layers? maplayer? georeflayer (world file)? paste a track as
+         an image, past a waypoint as coordinates to plug into geocaching.com,
+         ideas?
+
 TODO till release 0.1.1:
+
+
 IMPORTANT STUFF:
        check out bgitemcount stuff in background.c (hangs on clear!)
+       fix weird VikTreeview crashes, possibly related to DND, possibly more than one bug
+               ** ERROR **: file vikaggregatelayer.c: line 233 (disconnect_layer_signal): assertion failed: (DISCONNECT_UPDATE_SIGNAL(vl,val)==1)
+
        g_dtostr instead of fprintf in the appropriate places
        Debugging output shouldn't be printf'd but we g_print'd, and we should have a DEBUG flag
+       fix KH maps download
 
 BIG THINGS:
+       DND between VikWindows
        Fix coord layer for various projections
        selections (select area of waypoints, trackpoints, etc)
        Clipboard done right -- GtkClipboard, between processes
index 5144aa3369f9092bbd749983464376fbfe9e2640..e62e9729a928540d30221031eb4f7373fd4cc183 100644 (file)
@@ -205,6 +205,8 @@ void a_clipboard_copy ( VikLayersPanel *vlp )
     if ( vik_layer_get_interface(vc->layer_type)->copy_item && (vc->clipboard = vik_layer_get_interface(vc->layer_type)->
         copy_item(sel,vc->subtype=vik_treeview_item_get_data(sel->vt,&iter),vik_treeview_item_get_pointer(sel->vt,&iter)) ))
       vc->type = DATA_SUBLAYER;
+    else
+      return; /* selected sublayer is uncopyable */
   }
   else
   {
@@ -225,8 +227,3 @@ gboolean a_clipboard_paste ( VikLayersPanel *vlp )
   gtk_clipboard_request_targets ( c, clip_receive_targets, vlp );
   return TRUE;
 }
-
-void a_clipboard_uninit ()
-{
-  /* not needed any longer */
-}
index 56e6a64868300ae74f71c81dc4c7cae1c9847082..bb606ada48480ba38bb4edeb18c9b7072cf8476c 100644 (file)
@@ -24,6 +24,5 @@
 
 void a_clipboard_copy ( VikLayersPanel *vlp );
 gboolean a_clipboard_paste ( VikLayersPanel *vlp );
-void a_clipboard_uninit ();
 
 #endif
index 09497d3e4aa741467eaa88a0d25d91cc961c1113..2331314ab983a4c876f5293070d0d2dc2bfde1d4 100644 (file)
@@ -103,7 +103,6 @@ int main( int argc, char *argv[] )
   gtk_main ();
   gdk_threads_leave ();
 
-  a_clipboard_uninit ();
   a_mapcache_uninit ();
 
   return 0;
index 5c8bc9edec88cccf24a8f91ffdf7e48137929a9b..d16a737923d64c986fb72315099eb6845d0fb9ef 100644 (file)
@@ -217,6 +217,8 @@ static VikWaypoint *closest_wp_in_five_pixel_interval ( VikTrwLayer *vtl, VikVie
 
 static void trw_layer_change_coord_mode ( VikTrwLayer *vtl, VikCoordMode dest_mode );
 
+static gchar *get_new_unique_sublayer_name (VikTrwLayer *vtl, gint sublayer_type, const gchar *name);
+
 static VikToolInterface trw_layer_tools[] = {
   { "Create Waypoint", (VikToolInterfaceFunc) tool_new_waypoint, NULL },
   { "Create Track", (VikToolInterfaceFunc) tool_new_track, NULL },
@@ -391,13 +393,17 @@ static gboolean trw_layer_paste_item ( VikTrwLayer *vtl, gint subtype, gpointer
   if ( subtype == VIK_TRW_LAYER_SUBLAYER_WAYPOINT && item )
   {
     NamedWaypoint *nw = (NamedWaypoint *) item;
-    vik_trw_layer_add_waypoint ( vtl, g_strdup(nw->name), vik_waypoint_copy(nw->wp) );
+    vik_trw_layer_add_waypoint ( vtl,
+        get_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, nw->name),
+        vik_waypoint_copy(nw->wp) );
     return TRUE;
   }
   if ( subtype == VIK_TRW_LAYER_SUBLAYER_TRACK && item )
   {
     NamedTrack *nt = (NamedTrack *) item;
-    vik_trw_layer_add_track ( vtl, g_strdup(nt->name), vik_track_copy(nt->tr) );
+    vik_trw_layer_add_track ( vtl,
+       get_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, nt->name),
+       vik_track_copy(nt->tr) );
     return TRUE;
   }
   return FALSE;
@@ -1519,6 +1525,20 @@ static void trw_layer_cancel_tps_of_track ( VikTrwLayer *vtl, const gchar *trk_n
   else if (vtl->last_tp_track_name && g_strcasecmp(trk_name, vtl->last_tp_track_name) == 0)
     trw_layer_cancel_last_tp ( vtl );
 }
+       
+static gchar *get_new_unique_sublayer_name (VikTrwLayer *vtl, gint sublayer_type, const gchar *name)
+{
+ gint i = 2;
+ gchar *newname = g_strdup(name);
+ while ((sublayer_type == VIK_TRW_LAYER_SUBLAYER_TRACK) ?
+         vik_trw_layer_get_track(vtl, newname) : vik_trw_layer_get_waypoint(vtl, newname)) {
+    gchar *new_newname = g_strdup_printf("%s#%d", name, i);
+    g_free(newname);
+    newname = new_newname;
+    i++;
+  }
+  return newname;
+}
 
 static void trw_layer_drag_drop_request ( VikTrwLayer *vtl_src, VikTrwLayer *vtl_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path )
 {
@@ -1528,30 +1548,17 @@ static void trw_layer_drag_drop_request ( VikTrwLayer *vtl_src, VikTrwLayer *vtl
   } else {
     gint type = vik_treeview_item_get_data(vt, src_item_iter);
     gchar *name = vik_treeview_item_get_pointer(vt, src_item_iter);
-    gint i = 2;
 
     if (type==VIK_TRW_LAYER_SUBLAYER_TRACK) {
       VikTrack *t;
-      gchar *newname = g_strdup(name);
-      while (vik_trw_layer_get_track(vtl_dest, newname)) {
-       gchar *new_newname = g_strdup_printf("%s#%d", name, i);
-       g_free(newname);
-       newname = new_newname;
-       i++;
-      }
+      gchar *newname = get_new_unique_sublayer_name(vtl_dest, VIK_TRW_LAYER_SUBLAYER_TRACK, name);
       t = vik_track_copy(vik_trw_layer_get_track(vtl_src, name));
       vik_trw_layer_delete_track(vtl_src, name);
       vik_trw_layer_add_track(vtl_dest, newname, t);
     }
     if (type==VIK_TRW_LAYER_SUBLAYER_WAYPOINT) {
       VikWaypoint *w;
-      gchar *newname = g_strdup(name);
-      while (vik_trw_layer_get_waypoint(vtl_dest, newname)) {
-       gchar *new_newname = g_strdup_printf("%s#%d", name, i);
-       g_free(newname);
-       newname = new_newname;
-       i++;
-      }
+      gchar *newname = get_new_unique_sublayer_name(vtl_dest, VIK_TRW_LAYER_SUBLAYER_WAYPOINT, name);
       w = vik_waypoint_copy(vik_trw_layer_get_waypoint(vtl_src, name));
       vik_trw_layer_delete_waypoint(vtl_src, name);
       vik_trw_layer_add_waypoint(vtl_dest, newname, w);