]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikmapslayer.c
(no commit message)
[andy/viking.git] / src / vikmapslayer.c
index 4dd894c7ac0d2656eefe7754d583c388b550b4c0..3ef8ea903746fb5144c48c13598be277c20c1ccb 100644 (file)
@@ -94,7 +94,7 @@ static gchar *params_mapzooms[] = { "Use Viking Zoom Level", "0.25", "1", "2", "
 static gdouble __mapzooms_x[] = { 0.0, 0.25, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 1.016, 2.4384, 2.54, 5.08, 10.16, 20.32, 25.4 };
 static gdouble __mapzooms_y[] = { 0.0, 0.25, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 1.016, 2.4384, 2.54, 5.08, 10.16, 20.32, 25.4 };
 
-static gchar *params_maptypes[] = { "Terraserver Topos", "Terraserver Aerials", "Terraserver Urban Areas", "Expedia (Street Maps)", "Google Maps (Street)", "KH Maps", "New (Mercator) Google", "Transparent Google", "New (Mercator) KH" };
+static gchar *params_maptypes[] = { "Terraserver Topos", "Terraserver Aerials", "Terraserver Urban Areas", "Expedia Street Maps", "Old Google Maps", "Old KH Satellite Images", "Google Maps", "Transparent Google Maps", "Google Satellite Images" };
 static guint params_maptypes_ids[] = { 2, 1, 4, 5, 9, 8, 7, 10, 11 };
 #define NUM_MAPZOOMS (sizeof(params_mapzooms)/sizeof(params_mapzooms[0]))
 
@@ -102,6 +102,8 @@ static guint params_maptypes_ids[] = { 2, 1, 4, 5, 9, 8, 7, 10, 11 };
 
 
 static VikMapsLayer *maps_layer_copy ( VikMapsLayer *vml, VikViewport *vvp );
+static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len );
+static VikMapsLayer *maps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
 static gboolean maps_layer_set_param ( VikMapsLayer *vml, guint16 id, VikLayerParamData data, VikViewport *vvp );
 static VikLayerParamData maps_layer_get_param ( VikMapsLayer *vml, guint16 id );
 static void maps_layer_draw ( VikMapsLayer *vml, VikViewport *vvp );
@@ -109,6 +111,7 @@ static VikMapsLayer *maps_layer_new ( VikViewport *vvp );
 static void maps_layer_free ( VikMapsLayer *vml );
 static gboolean maps_layer_download_release ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp );
 static gboolean maps_layer_download_click ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp );
+static gpointer maps_layer_download_create ( VikWindow *vw, VikViewport *vvp );
 static void maps_layer_set_cache_dir ( VikMapsLayer *vml, const gchar *dir );
 static void start_download_thread ( VikMapsLayer *vml, VikViewport *vvp, const VikCoord *ul, const VikCoord *br, gint redownload );
 static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp );
@@ -130,7 +133,8 @@ VikLayerParam maps_layer_params[] = {
 enum { PARAM_MAPTYPE=0, PARAM_CACHE_DIR, PARAM_ALPHA, PARAM_AUTODOWNLOAD, PARAM_MAPZOOM, NUM_PARAMS };
 
 static VikToolInterface maps_tools[] = {
-  { "Maps Download", (VikToolInterfaceFunc) maps_layer_download_click, (VikToolInterfaceFunc) maps_layer_download_release },
+  { "Maps Download", (VikToolConstructorFunc) maps_layer_download_create, NULL, NULL, NULL,  
+    (VikToolMouseFunc) maps_layer_download_click, NULL,  (VikToolMouseFunc) maps_layer_download_release },
 };
 
 VikLayerInterface vik_maps_layer_interface = {
@@ -161,6 +165,8 @@ VikLayerInterface vik_maps_layer_interface = {
   (VikLayerFuncSublayerToggleVisible)   NULL,
 
   (VikLayerFuncCopy)                    maps_layer_copy,
+  (VikLayerFuncMarshall)               maps_layer_marshall,
+  (VikLayerFuncUnmarshall)             maps_layer_unmarshall,
 
   (VikLayerFuncSetParam)                maps_layer_set_param,
   (VikLayerFuncGetParam)                maps_layer_get_param,
@@ -168,6 +174,7 @@ VikLayerInterface vik_maps_layer_interface = {
   (VikLayerFuncReadFileData)            NULL,
   (VikLayerFuncWriteFileData)           NULL,
 
+  (VikLayerFuncDeleteItem)              NULL,
   (VikLayerFuncCopyItem)                NULL,
   (VikLayerFuncPasteItem)               NULL,
   (VikLayerFuncFreeCopiedItem)          NULL,
@@ -397,6 +404,18 @@ static VikMapsLayer *maps_layer_copy ( VikMapsLayer *vml, VikViewport *vvp )
   return rv;
 }
 
+static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len )
+{
+  vik_layer_marshall_params ( VIK_LAYER(vml), data, len );
+}
+
+static VikMapsLayer *maps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp )
+{
+  VikMapsLayer *rv = maps_layer_new ( vvp );
+  vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp );
+  return rv;
+}
+
 /*********************/
 /****** DRAWING ******/
 /*********************/
@@ -759,7 +778,8 @@ static void maps_layer_redownload_all ( VikMapsLayer *vml )
 
 static gboolean maps_layer_download_release ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp )
 {
-
+  if (!vml || vml->vl.type != VIK_LAYER_MAPS)
+    return FALSE;
   if ( vml->dl_tool_x != -1 && vml->dl_tool_y != -1 )
   {
     if ( event->button == 1 )
@@ -800,9 +820,16 @@ static gboolean maps_layer_download_release ( VikMapsLayer *vml, GdkEventButton
   return FALSE;
 }
 
+static gpointer maps_layer_download_create ( VikWindow *vw, VikViewport *vvp)
+{
+  return vvp;
+}
+
 static gboolean maps_layer_download_click ( VikMapsLayer *vml, GdkEventButton *event, VikViewport *vvp )
 {
   MapCoord tmp;
+  if (!vml || vml->vl.type != VIK_LAYER_MAPS)
+    return FALSE;
   if ( __map_types[vml->maptype].drawmode == vik_viewport_get_drawmode ( vvp ) &&
     __map_types[vml->maptype].coord_to_mapcoord ( vik_viewport_get_center ( vvp ),
            vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp ),