]> git.street.me.uk Git - andy/viking.git/blobdiff - src/file.c
Merge pull request #20 from huobos/zh_CN
[andy/viking.git] / src / file.c
index bd07d19263f507a8d60006cd21b944476aa4cbff..f0d3f23ce4e0afc5ae545a7c9d1b9a760104b840 100644 (file)
@@ -59,7 +59,7 @@ typedef struct _Stack Stack;
 
 struct _Stack {
   Stack *under;
-  gpointer *data;
+  gpointer data;
 };
 
 static void pop(Stack **stack) {
@@ -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,33 +687,35 @@ 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_TRW_LAYER (vik_layer_create ( VIK_LAYER_TRW, vp, FALSE ));
+      vik_layer_rename ( VIK_LAYER(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 ) ) {
       // Implicit Conversion
       ProcessOptions po = { "-i kml", filename, NULL, NULL, NULL, NULL };
-      if ( ! ( success = a_babel_convert_from ( VIK_TRW_LAYER(vtl), &po, NULL, NULL, NULL ) ) ) {
+      if ( ! ( success = a_babel_convert_from ( vtl, &po, NULL, NULL, NULL ) ) ) {
         load_answer = LOAD_TYPE_GPSBABEL_FAILURE;
       }
     }
     // NB use a extension check first, as a GPX file header may have a Byte Order Mark (BOM) in it
     //    - which currently confuses our check_magic function
     else if ( a_file_check_ext ( filename, ".gpx" ) || check_magic ( f, GPX_MAGIC, GPX_MAGIC_LEN ) ) {
-      if ( ! ( success = a_gpx_read_file ( VIK_TRW_LAYER(vtl), f ) ) ) {
+      if ( ! ( success = a_gpx_read_file ( vtl, f ) ) ) {
         load_answer = LOAD_TYPE_GPX_FAILURE;
       }
     }
     else {
       // Try final supported file type
-      if ( ! ( success = a_gpspoint_read_file ( VIK_TRW_LAYER(vtl), f, dirpath ) ) ) {
+      if ( ! ( success = a_gpspoint_read_file ( vtl, f, dirpath ) ) ) {
         // Failure here means we don't know how to handle the file
         load_answer = LOAD_TYPE_UNSUPPORTED_FAILURE;
       }
     }
-    g_free ( dirpath );
-
     // Clean up when we can't handle the file
     if ( ! success ) {
       // free up layer
@@ -721,11 +723,14 @@ 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 );
+      vik_layer_post_read ( VIK_LAYER(vtl), vp, TRUE );
+      if (add_new) {
+        vik_aggregate_layer_add_layer ( top, VIK_LAYER(vtl), FALSE );
+      }
+      vik_trw_layer_auto_set_view ( vtl, vp );
     }
   }
+  g_free ( dirpath );
   xfclose(f);
   return load_answer;
 }