]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikmapsourcedefault.c
Use the last selected date when initializing the date search.
[andy/viking.git] / src / vikmapsourcedefault.c
index f3b949756b192321d919a84c10f0c53ae2fb0475..9251588897c5b65ace32bb5a461f2498c1cdb73c 100644 (file)
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+ /**
+  * SECTION:vikmapsourcedefault
+  * @short_description: the base class implementing most of generic features
+  * 
+  * The #VikMapSourceDefault class is the base class implementing most of
+  * generic feature, using properties or reducing complexity of some
+  * functions.
+  */
+
 #include "vikmapsourcedefault.h"
 #include "vikenumtypes.h"
 #include "download.h"
 
-static const gchar *map_source_get_copyright (VikMapSource *self);
+static void map_source_get_copyright (VikMapSource *self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data);
+static const gchar *map_source_get_license (VikMapSource *self);
+static const gchar *map_source_get_license_url (VikMapSource *self);
+static const GdkPixbuf *map_source_get_logo (VikMapSource *self);
 
-static guint8 map_source_get_uniq_id (VikMapSource *self);
+static guint16 map_source_get_uniq_id (VikMapSource *self);
 static const gchar *map_source_get_label (VikMapSource *self);
 static guint16 map_source_get_tilesize_x (VikMapSource *self);
 static guint16 map_source_get_tilesize_y (VikMapSource *self);
@@ -38,8 +50,11 @@ struct _VikMapSourceDefaultPrivate
 {
        /* legal stuff */
        gchar *copyright;
-       
-       guint8 uniq_id;
+       gchar *license;
+       gchar *license_url;
+       GdkPixbuf *logo;
+
+       guint16 uniq_id;
        gchar *label;
        guint16 tilesize_x;
        guint16 tilesize_y;
@@ -59,9 +74,11 @@ enum
   PROP_TILESIZE_Y,
   PROP_DRAWMODE,
   PROP_COPYRIGHT,
+  PROP_LICENSE,
+  PROP_LICENSE_URL,
 };
 
-G_DEFINE_TYPE_EXTENDED (VikMapSourceDefault, vik_map_source_default, VIK_TYPE_MAP_SOURCE, (GTypeFlags)G_TYPE_FLAG_ABSTRACT,);
+G_DEFINE_ABSTRACT_TYPE (VikMapSourceDefault, vik_map_source_default, VIK_TYPE_MAP_SOURCE);
 
 static void
 vik_map_source_default_init (VikMapSourceDefault *object)
@@ -71,6 +88,9 @@ vik_map_source_default_init (VikMapSourceDefault *object)
 
   priv->label = NULL;
   priv->copyright = NULL;
+  priv->license = NULL;
+  priv->license_url = NULL;
+  priv->logo = NULL;
 }
 
 static void
@@ -83,6 +103,12 @@ vik_map_source_default_finalize (GObject *object)
   priv->label = NULL;
   g_free (priv->copyright);
   priv->copyright = NULL;
+  g_free (priv->license);
+  priv->license = NULL;
+  g_free (priv->license_url);
+  priv->license_url = NULL;
+  g_free (priv->logo);
+  priv->license_url = NULL;
        
   G_OBJECT_CLASS (vik_map_source_default_parent_class)->finalize (object);
 }
@@ -102,7 +128,7 @@ vik_map_source_default_set_property (GObject      *object,
       priv->uniq_id = g_value_get_uint (value);
       break;
 
-       case PROP_LABEL:
+    case PROP_LABEL:
       g_free (priv->label);
       priv->label = g_strdup(g_value_get_string (value));
       break;
@@ -124,6 +150,16 @@ vik_map_source_default_set_property (GObject      *object,
       priv->copyright = g_strdup(g_value_get_string (value));
       break;
 
+    case PROP_LICENSE:
+      g_free (priv->license);
+      priv->license = g_strdup(g_value_get_string (value));
+      break;
+
+    case PROP_LICENSE_URL:
+      g_free (priv->license_url);
+      priv->license_url = g_strdup(g_value_get_string (value));
+      break;
+
     default:
       /* We don't have any other property... */
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -166,6 +202,14 @@ vik_map_source_default_get_property (GObject    *object,
       g_value_set_string (value, priv->copyright);
       break;
 
+    case PROP_LICENSE:
+      g_value_set_string (value, priv->license);
+      break;
+
+    case PROP_LICENSE_URL:
+      g_value_set_string (value, priv->license_url);
+      break;
+
     default:
       /* We don't have any other property... */
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -185,6 +229,9 @@ vik_map_source_default_class_init (VikMapSourceDefaultClass *klass)
        
        /* Overiding methods */
        parent_class->get_copyright =   map_source_get_copyright;
+       parent_class->get_license =     map_source_get_license;
+       parent_class->get_license_url = map_source_get_license_url;
+       parent_class->get_logo =        map_source_get_logo;
        parent_class->get_uniq_id =    map_source_get_uniq_id;
        parent_class->get_label =      map_source_get_label;
        parent_class->get_tilesize_x = map_source_get_tilesize_x;
@@ -245,28 +292,77 @@ vik_map_source_default_class_init (VikMapSourceDefaultClass *klass)
                                     "Copyright",
                                     "The copyright of the map source",
                                     NULL,
-                                    G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+                                    G_PARAM_READWRITE);
        g_object_class_install_property (object_class, PROP_COPYRIGHT, pspec);
 
+       pspec = g_param_spec_string ("license",
+                                    "License",
+                                    "The license of the map source",
+                                    NULL,
+                                    G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+       g_object_class_install_property (object_class, PROP_LICENSE, pspec);
+
+       pspec = g_param_spec_string ("license-url",
+                                    "License URL",
+                                    "The URL of the license of the map source",
+                                    NULL,
+                                    G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
+       g_object_class_install_property (object_class, PROP_LICENSE_URL, pspec);
+
        g_type_class_add_private (klass, sizeof (VikMapSourceDefaultPrivate));
 
        object_class->finalize = vik_map_source_default_finalize;
 }
 
+static void
+map_source_get_copyright (VikMapSource *self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data)
+{
+       /* Just ignore bbox and zoom level */
+       g_return_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self));
+
+       g_debug ("%s: %g %g %g %g %g", __FUNCTION__,
+               bbox.south, bbox.north, bbox.east, bbox.west,
+               zoom);
+       
+       VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self);
+
+       (*fct) (data, priv->copyright);
+}
+
+static const gchar *
+map_source_get_license (VikMapSource *self)
+{
+       g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL);
+       
+       VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self);
+
+       return priv->license;
+}
+
 static const gchar *
-map_source_get_copyright (VikMapSource *self)
+map_source_get_license_url (VikMapSource *self)
 {
        g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL);
        
        VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self);
 
-       return priv->copyright;
+       return priv->license_url;
 }
 
-static guint8
+static const GdkPixbuf *
+map_source_get_logo (VikMapSource *self)
+{
+       g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL);
+
+       VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self);
+
+       return priv->logo;
+}
+
+static guint16
 map_source_get_uniq_id (VikMapSource *self)
 {
-       g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint8)0);
+       g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint16)0);
        
        VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self);
 
@@ -336,7 +432,7 @@ _download_handle_init ( VikMapSource *self )
 static void
 _download_handle_cleanup ( VikMapSource *self, void *handle )
 {
-   return a_download_handle_cleanup ( handle );
+   a_download_handle_cleanup ( handle );
 }
 
 gchar *