]> git.street.me.uk Git - andy/viking.git/commitdiff
Merge pull request #17 from huobos/gpx
authorRob Norris <rw_norris@hotmail.com>
Sat, 21 Jan 2017 13:51:19 +0000 (13:51 +0000)
committerGitHub <noreply@github.com>
Sat, 21 Jan 2017 13:51:19 +0000 (13:51 +0000)
Open files in selected layer

src/file.c
src/file.h
src/vikwindow.c

index ea80d8893d4cbaf81eacd3a2f8a69e96ea1b4582..7ea858071b86b5f0d9728f7d22e0e752028cc060 100644 (file)
@@ -649,7 +649,7 @@ gchar *append_file_ext ( const gchar *filename, VikFileType_t type )
   return new_name;
 }
 
-VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename_or_uri )
+VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, VikTrwLayer *vtl, const gchar *filename_or_uri )
 {
   g_return_val_if_fail ( vp != NULL, LOAD_TYPE_READ_FAILURE );
 
@@ -687,8 +687,12 @@ VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar
        //  must be loaded into a new TrackWaypoint layer (hence it be created)
     gboolean success = TRUE; // Detect load failures - mainly to remove the layer created as it's not required
 
-    VikLayer *vtl = vik_layer_create ( VIK_LAYER_TRW, vp, FALSE );
-    vik_layer_rename ( vtl, a_file_basename ( filename ) );
+    // Add to specified layer
+    gboolean add_new = !IS_VIK_TRW_LAYER(vtl);
+    if (add_new) {
+      vtl = vik_layer_create ( VIK_LAYER_TRW, vp, FALSE );
+      vik_layer_rename ( vtl, a_file_basename ( filename ) );
+    }
 
     // In fact both kml & gpx files start the same as they are in xml
     if ( a_file_check_ext ( filename, ".kml" ) && check_magic ( f, GPX_MAGIC, GPX_MAGIC_LEN ) ) {
@@ -720,8 +724,10 @@ VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar
     else {
       // Complete the setup from the successful load
       vik_layer_post_read ( vtl, vp, TRUE );
-      vik_aggregate_layer_add_layer ( top, vtl, FALSE );
-      vik_trw_layer_auto_set_view ( VIK_TRW_LAYER(vtl), vp );
+      if (add_new) {
+        vik_aggregate_layer_add_layer ( top, vtl, FALSE );
+        vik_trw_layer_auto_set_view ( VIK_TRW_LAYER(vtl), vp );
+      }
     }
   }
   g_free ( dirpath );
index 70fe1238282fcbb745e4932f8740728304a57d75..a0b50d4f63f6019fce00ab4c09c97a79b8141772 100644 (file)
@@ -58,7 +58,7 @@ typedef enum {
 
 gchar *append_file_ext ( const gchar *filename, VikFileType_t type );
 
-VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename );
+VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, VikTrwLayer *vtl, const gchar *filename );
 gboolean a_file_save ( VikAggregateLayer *top, gpointer vp, const gchar *filename );
 /* Only need to define VikTrack if the file type is FILE_TYPE_GPX_TRACK */
 gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, VikTrack *trk, gboolean write_hidden );
index 833b8c9c6cf662caeffd7739878eae18d0063e50..d8beffbe47f7e9f3dbfe47c83624a9fa3f312aaf 100644 (file)
@@ -3100,8 +3100,7 @@ void vik_window_open_file ( VikWindow *vw, const gchar *filename, gboolean chang
   vw->filename = g_strdup ( filename );
   gboolean success = FALSE;
   gboolean restore_original_filename = FALSE;
-
-  vw->loaded_type = a_file_load ( vik_layers_panel_get_top_layer(vw->viking_vlp), vw->viking_vvp, filename );
+  vw->loaded_type = a_file_load ( vik_layers_panel_get_top_layer(vw->viking_vlp), vw->viking_vvp, vw->containing_vtl, filename );
   switch ( vw->loaded_type )
   {
     case LOAD_TYPE_READ_FAILURE: