enum { PARAM_MAPTYPE=0, PARAM_CACHE_DIR, PARAM_ALPHA, PARAM_AUTODOWNLOAD, PARAM_MAPZOOM, NUM_PARAMS };
static VikToolInterface maps_tools[] = {
- { N_("Maps Download"), (VikToolConstructorFunc) maps_layer_download_create, NULL, NULL, NULL,
- (VikToolMouseFunc) maps_layer_download_click, NULL, (VikToolMouseFunc) maps_layer_download_release,
- (VikToolKeyFunc) NULL, GDK_CURSOR_IS_PIXMAP, &cursor_mapdl_pixbuf },
+ { { "MapsDownload", "vik-icon-Maps Download", N_("_Maps Download"), NULL, N_("Maps Download"), 0 },
+ (VikToolConstructorFunc) maps_layer_download_create,
+ NULL,
+ NULL,
+ NULL,
+ (VikToolMouseFunc) maps_layer_download_click,
+ NULL,
+ (VikToolMouseFunc) maps_layer_download_release,
+ NULL,
+ FALSE,
+ GDK_CURSOR_IS_PIXMAP, &cursor_mapdl_pixbuf },
};
VikLayerInterface vik_maps_layer_interface = {
+ "Map",
N_("Map"),
+ "<control><shift>M",
&vikmapslayer_pixbuf,
maps_tools,
params_maptypes[index] = g_strdup (label);
}
+/**
+ * maps_layer_register_map_source:
+ * @map: the new VikMapSource
+ *
+ * Register a new VikMapSource.
+ * Override existing one (equality of id).
+ */
void maps_layer_register_map_source ( VikMapSource *map )
{
g_assert(map != NULL);
/******** CACHE DIR STUFF ***************/
/****************************************/
+#define DIRECTDIRACCESS "%s%d" G_DIR_SEPARATOR_S "%d" G_DIR_SEPARATOR_S "%d%s"
#define DIRSTRUCTURE "%st%ds%dz%d" G_DIR_SEPARATOR_S "%d" G_DIR_SEPARATOR_S "%d"
#define MAPS_CACHE_DIR maps_layer_default_dir()
{
int idx;
VikMapsLayer *vml = VIK_MAPS_LAYER ( g_object_new ( VIK_MAPS_LAYER_TYPE, NULL ) );
- vik_layer_init ( VIK_LAYER(vml), VIK_LAYER_MAPS );
+ vik_layer_set_type ( VIK_LAYER(vml), VIK_LAYER_MAPS );
idx = map_uniq_id_to_index(19); /* 19 is id for OSM MapQuest maps */
vml->maptype = (idx < NUM_MAP_TYPES) ? idx : 0;
+ vml->maptype = (idx < NUM_MAP_TYPES) ? idx : 0;
vml->alpha = 255;
vml->mapzoom_id = 0;
vml->dl_tool_x = vml->dl_tool_y = -1;
mode, mapcoord->scale, vml->alpha, xshrinkfactor, yshrinkfactor );
if ( ! pixbuf ) {
- g_snprintf ( filename_buf, buf_len, DIRSTRUCTURE,
- vml->cache_dir, mode,
- mapcoord->scale, mapcoord->z, mapcoord->x, mapcoord->y );
+ if ( vik_map_source_is_direct_file_access (MAPS_LAYER_NTH_TYPE(vml->maptype)) )
+ g_snprintf ( filename_buf, buf_len, DIRECTDIRACCESS,
+ vml->cache_dir, (17 - mapcoord->scale), mapcoord->x, mapcoord->y, ".png" );
+ else
+ g_snprintf ( filename_buf, buf_len, DIRSTRUCTURE,
+ vml->cache_dir, mode,
+ mapcoord->scale, mapcoord->z, mapcoord->x, mapcoord->y );
+
if ( g_file_test ( filename_buf, G_FILE_TEST_EXISTS ) == TRUE)
{
GError *gx = NULL;
gdouble xzoom = vik_viewport_get_xmpp ( vvp );
gdouble yzoom = vik_viewport_get_ympp ( vvp );
gdouble xshrinkfactor = 1.0, yshrinkfactor = 1.0;
- gdouble existence_only = FALSE;
+ gboolean existence_only = FALSE;
if ( vml->xmapzoom && (vml->xmapzoom != xzoom || vml->ymapzoom != yzoom) ) {
xshrinkfactor = vml->xmapzoom / xzoom;
ulm.y = y;
if ( existence_only ) {
- g_snprintf ( path_buf, max_path_len, DIRSTRUCTURE,
- vml->cache_dir, mode,
- ulm.scale, ulm.z, ulm.x, ulm.y );
+ if ( vik_map_source_is_direct_file_access (MAPS_LAYER_NTH_TYPE(vml->maptype)) )
+ g_snprintf ( path_buf, max_path_len, DIRECTDIRACCESS,
+ vml->cache_dir, (17 - ulm.scale), ulm.x, ulm.y, ".png" );
+ else
+ g_snprintf ( path_buf, max_path_len, DIRSTRUCTURE,
+ vml->cache_dir, mode,
+ ulm.scale, ulm.z, ulm.x, ulm.y );
if ( g_file_test ( path_buf, G_FILE_TEST_EXISTS ) == TRUE ) {
GdkGC *black_gc = GTK_WIDGET(vvp)->style->black_gc;
vik_viewport_draw_line ( vvp, black_gc, xx+tilesize_x_ceil, yy, xx, yy+tilesize_y_ceil );
gdouble yzoom = vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp );
MapCoord ulm, brm;
VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+
+ // Don't ever attempt download on direct access
+ if ( vik_map_source_is_direct_file_access ( map ) )
+ return;
+
if ( vik_map_source_coord_to_mapcoord ( map, ul, xzoom, yzoom, &ulm )
&& vik_map_source_coord_to_mapcoord ( map, br, xzoom, yzoom, &brm ) )
{
}
}
-void maps_layer_download_section_without_redraw( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br, gdouble zoom)
+void maps_layer_download_section ( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br, gdouble zoom)
{
MapCoord ulm, brm;
VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ // Don't ever attempt download on direct access
+ if ( vik_map_source_is_direct_file_access ( map ) )
+ return;
+
if (!vik_map_source_coord_to_mapcoord(map, ul, zoom, zoom, &ulm)
|| !vik_map_source_coord_to_mapcoord(map, br, zoom, zoom, &brm)) {
g_warning("%s() coord_to_mapcoord() failed", __PRETTY_FUNCTION__);
mdi->vvp = vvp;
mdi->map_layer_alive = TRUE;
mdi->mutex = g_mutex_new();
- mdi->refresh_display = FALSE;
+ mdi->refresh_display = TRUE;
mdi->cache_dir = g_strdup ( vml->cache_dir );
mdi->maxlen = strlen ( vml->cache_dir ) + 40;
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show ( item );
}
+
+/**
+ * Enable downloading maps of the current screen area either 'new' or 'everything'
+ */
+void vik_maps_layer_download ( VikMapsLayer *vml, VikViewport *vvp, gboolean only_new )
+{
+ if ( !vml ) return;
+ if ( !vvp ) return;
+
+ static gpointer pass_along[2];
+ pass_along[0] = vml;
+ pass_along[1] = vvp;
+
+ if ( only_new )
+ // Get only new maps
+ maps_layer_download_new_onscreen_maps ( pass_along );
+ else
+ // Redownload everything
+ maps_layer_redownload_all_onscreen_maps ( pass_along );
+}