]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikslippymapsource.c
Reduce warnings when compiling on Windows
[andy/viking.git] / src / vikslippymapsource.c
index d8e45a9dc657f5005e35200d6a93342efefc5cdc..0fd926bfdf6a0dc379f1bf921b32b9661cc401ed 100644 (file)
@@ -55,6 +55,7 @@
 static gboolean _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdouble yzoom, MapCoord *dest );
 static void _mapcoord_to_center_coord ( VikMapSource *self, MapCoord *src, VikCoord *dest );
 
+static gboolean _is_direct_file_access (VikMapSource *self );
 static gboolean _supports_download_only_new (VikMapSource *self );
 
 static gchar *_get_uri( VikMapSourceDefault *self, MapCoord *src );
@@ -67,6 +68,7 @@ struct _VikSlippyMapSourcePrivate
   gchar *hostname;
   gchar *url;
   DownloadMapOptions options;
+  gboolean is_direct_file_access;
 };
 
 #define VIK_SLIPPY_MAP_SOURCE_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_SLIPPY_MAP_SOURCE, VikSlippyMapSourcePrivate))
@@ -82,6 +84,7 @@ enum
   PROP_FOLLOW_LOCATION,
   PROP_CHECK_FILE_SERVER_TIME,
   PROP_USE_ETAG,
+  PROP_IS_DIRECT_FILE_ACCESS,
 };
 
 G_DEFINE_TYPE (VikSlippyMapSource, vik_slippy_map_source, VIK_TYPE_MAP_SOURCE_DEFAULT);
@@ -98,6 +101,8 @@ vik_slippy_map_source_init (VikSlippyMapSource *self)
   priv->options.follow_location = 0;
   priv->options.check_file = a_check_map_file;
   priv->options.check_file_server_time = FALSE;
+  priv->options.use_etag = FALSE;
+  priv->is_direct_file_access = FALSE;
 
   g_object_set (G_OBJECT (self),
                 "tilesize-x", 256,
@@ -160,6 +165,10 @@ vik_slippy_map_source_set_property (GObject      *object,
       priv->options.use_etag = g_value_get_boolean (value);
       break;
 
+    case PROP_IS_DIRECT_FILE_ACCESS:
+      priv->is_direct_file_access = g_value_get_boolean (value);
+      break;
+
     default:
       /* We don't have any other property... */
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -202,6 +211,10 @@ vik_slippy_map_source_get_property (GObject    *object,
       g_value_set_boolean (value, priv->options.use_etag);
       break;
 
+    case PROP_IS_DIRECT_FILE_ACCESS:
+      g_value_set_boolean (value, priv->is_direct_file_access);
+      break;
+
     default:
       /* We don't have any other property... */
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -223,6 +236,7 @@ vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass)
        /* Overiding methods */
        grandparent_class->coord_to_mapcoord =        _coord_to_mapcoord;
        grandparent_class->mapcoord_to_center_coord = _mapcoord_to_center_coord;
+       grandparent_class->is_direct_file_access = _is_direct_file_access;
        grandparent_class->supports_download_only_new = _supports_download_only_new;
 
        parent_class->get_uri = _get_uri;
@@ -233,14 +247,14 @@ vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass)
                                     "Hostname",
                                     "The hostname of the map server",
                                     "<no-set>" /* default value */,
-                                    G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+                                    G_PARAM_READWRITE);
        g_object_class_install_property (object_class, PROP_HOSTNAME, pspec);
 
        pspec = g_param_spec_string ("url",
                                     "URL",
                                     "The template of the tiles' URL",
                                     "<no-set>" /* default value */,
-                                    G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+                                    G_PARAM_READWRITE);
        g_object_class_install_property (object_class, PROP_URL, pspec);
 
        pspec = g_param_spec_string ("referer",
@@ -273,6 +287,13 @@ vik_slippy_map_source_class_init (VikSlippyMapSourceClass *klass)
                                   G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
        g_object_class_install_property (object_class, PROP_USE_ETAG, pspec);
 
+       pspec = g_param_spec_boolean ("use-direct-file-access",
+                                     "Use direct file access",
+                                     "Use direct file access to OSM like tile images - no need for a webservice",
+                                  FALSE  /* default value */,
+                                  G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+       g_object_class_install_property (object_class, PROP_IS_DIRECT_FILE_ACCESS, pspec);
+
        g_type_class_add_private (klass, sizeof (VikSlippyMapSourcePrivate));
        
        object_class->finalize = vik_slippy_map_source_finalize;
@@ -290,7 +311,8 @@ static const gdouble scale_neg_mpps[] = { 1.0/GZ(0), 1.0/GZ(1), 1.0/GZ(2), 1.0/G
 static const gint num_scales_neg = (sizeof(scale_neg_mpps) / sizeof(scale_neg_mpps[0]));
 
 #define ERROR_MARGIN 0.01
-static gint slippy_zoom ( gdouble mpp ) {
+gint
+vik_slippy_map_source_zoom_to_scale ( gdouble mpp ) {
   gint i;
   for ( i = 0; i < num_scales; i++ ) {
     if ( ABS(scale_mpps[i] - mpp) < ERROR_MARGIN ) {
@@ -306,6 +328,16 @@ static gint slippy_zoom ( gdouble mpp ) {
   return 255;
 }
 
+gboolean
+_is_direct_file_access (VikMapSource *self)
+{
+  g_return_val_if_fail (VIK_IS_SLIPPY_MAP_SOURCE(self), FALSE);
+
+  VikSlippyMapSourcePrivate *priv = VIK_SLIPPY_MAP_SOURCE_PRIVATE(self);
+
+  return priv->is_direct_file_access;
+}
+
 gboolean
 _supports_download_only_new (VikMapSource *self)
 {
@@ -324,7 +356,7 @@ _coord_to_mapcoord ( VikMapSource *self, const VikCoord *src, gdouble xzoom, gdo
   if ( xzoom != yzoom )
     return FALSE;
 
-  dest->scale = slippy_zoom ( xzoom );
+  dest->scale = vik_slippy_map_source_zoom_to_scale ( xzoom );
   if ( dest->scale == 255 )
     return FALSE;