X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/82aa018d355d4cad72d46862f98e24566c46acb7..23d6216c871ca648a093bd992f25fd9ce18f971d:/src/vikmapsourcedefault.c diff --git a/src/vikmapsourcedefault.c b/src/vikmapsourcedefault.c index f3b94975..92515888 100644 --- a/src/vikmapsourcedefault.c +++ b/src/vikmapsourcedefault.c @@ -17,13 +17,25 @@ * with this program. If not, see . */ + /** + * 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 *