+
+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 )
+{
+ VikTreeview *vt = VIK_LAYER(vtl_src)->vt;
+ if (!vik_treeview_item_get_pointer(vt, src_item_iter)) {
+ g_print("moving a trw container: not implemented yet.\n");
+ } else {
+ gint type = vik_treeview_item_get_data(vt, src_item_iter);
+ gchar *name = vik_treeview_item_get_pointer(vt, src_item_iter);
+
+ if (type==VIK_TRW_LAYER_SUBLAYER_TRACK) {
+ VikTrack *t;
+ 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 = 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);
+ }
+ }
+}