*
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#define MAX_SHRINKFACTOR 8.0000001 /* zoom 1 viewing 8-tiles */
#define MIN_SHRINKFACTOR 0.0312499 /* zoom 32 viewing 1-tiles */
#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixdata.h>
-#include <stdio.h>
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <glib/gi18n.h>
+
#include <string.h>
#include <math.h>
#include "globals.h"
#include "vikviewport.h"
#include "viklayer.h"
#include "vikmapslayer.h"
-#include "vikmapslayer_pixmap.h"
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
+#endif
#include "mapcache.h"
/* only for dialog.h -- ugh */
#include "mapcoord.h"
#include "terraserver.h"
+#include "icons/icons.h"
+
/****** MAP TYPES ******/
static GList *__map_types = NULL;
/******** MAPZOOMS *********/
-static gchar *params_mapzooms[] = { "Use Viking Zoom Level", "0.25", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "USGS 10k", "USGS 24k", "USGS 25k", "USGS 50k", "USGS 100k", "USGS 200k", "USGS 250k", NULL };
+static gchar *params_mapzooms[] = { N_("Use Viking Zoom Level"), "0.25", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "USGS 10k", "USGS 24k", "USGS 25k", "USGS 50k", "USGS 100k", "USGS 200k", "USGS 250k", NULL };
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 VikMapsLayer *maps_layer_copy ( VikMapsLayer *vml, VikViewport *vvp );
static void maps_layer_post_read (VikLayer *vl, VikViewport *vp, gboolean from_file);
static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len );
static VikMapsLayer *maps_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
};
VikLayerParam maps_layer_params[] = {
- { "mode", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, "Map Type:", VIK_LAYER_WIDGET_RADIOGROUP, NULL, NULL },
- { "directory", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, "Maps Directory (Optional):", VIK_LAYER_WIDGET_FILEENTRY },
- { "alpha", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, "Alpha:", VIK_LAYER_WIDGET_HSCALE, params_scales },
- { "autodownload", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, "Autodownload maps:", VIK_LAYER_WIDGET_CHECKBUTTON },
- { "mapzoom", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, "Zoom Level:", VIK_LAYER_WIDGET_COMBOBOX, params_mapzooms },
+ { "mode", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Map Type:"), VIK_LAYER_WIDGET_RADIOGROUP, NULL, NULL },
+ { "directory", VIK_LAYER_PARAM_STRING, VIK_LAYER_GROUP_NONE, N_("Maps Directory (Optional):"), VIK_LAYER_WIDGET_FILEENTRY },
+ { "alpha", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Alpha:"), VIK_LAYER_WIDGET_HSCALE, params_scales },
+ { "autodownload", VIK_LAYER_PARAM_BOOLEAN, VIK_LAYER_GROUP_NONE, N_("Autodownload maps:"), VIK_LAYER_WIDGET_CHECKBUTTON },
+ { "mapzoom", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Zoom Level:"), VIK_LAYER_WIDGET_COMBOBOX, params_mapzooms },
};
enum { PARAM_MAPTYPE=0, PARAM_CACHE_DIR, PARAM_ALPHA, PARAM_AUTODOWNLOAD, PARAM_MAPZOOM, NUM_PARAMS };
static VikToolInterface maps_tools[] = {
- { "Maps Download", (VikToolConstructorFunc) maps_layer_download_create, NULL, NULL, NULL,
- (VikToolMouseFunc) maps_layer_download_click, NULL, (VikToolMouseFunc) maps_layer_download_release },
+ { 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 },
};
VikLayerInterface vik_maps_layer_interface = {
- "Map",
- &mapslayer_pixbuf,
+ N_("Map"),
+ &vikmapslayer_pixbuf,
maps_tools,
sizeof(maps_tools) / sizeof(maps_tools[0]),
(VikLayerFuncSublayerRenameRequest) NULL,
(VikLayerFuncSublayerToggleVisible) NULL,
- (VikLayerFuncCopy) maps_layer_copy,
(VikLayerFuncMarshall) maps_layer_marshall,
(VikLayerFuncUnmarshall) maps_layer_unmarshall,
/******** MAPS LAYER TYPES **************/
/****************************************/
-void maps_layer_register_type ( const char *label, guint id, VikMapsLayer_MapType *map_type )
+void maps_layer_register_map_source ( const char *label, VikMapSource *map )
{
g_assert(label != NULL);
- g_assert(map_type != NULL);
- g_assert(id == map_type->uniq_id);
+ g_assert(map != NULL);
+
+ guint id = vik_map_source_get_uniq_id(map);
/* Add the label */
params_maptypes = g_list_append(params_maptypes, g_strdup(label));
/* Add the id */
- params_maptypes_ids = g_list_append(params_maptypes_ids, (gpointer)id);
+ params_maptypes_ids = g_list_append(params_maptypes_ids, GUINT_TO_POINTER (id));
/* We have to clone */
- VikMapsLayer_MapType *clone = g_memdup(map_type, sizeof(VikMapsLayer_MapType));
+ VikMapSource *clone = VIK_MAP_SOURCE(g_object_ref(map));
/* Register the clone in the list */
__map_types = g_list_append(__map_types, clone);
#define MAPS_LAYER_NTH_LABEL(n) ((gchar*)g_list_nth_data(params_maptypes, (n)))
#define MAPS_LAYER_NTH_ID(n) ((guint)g_list_nth_data(params_maptypes_ids, (n)))
-#define MAPS_LAYER_NTH_TYPE(n) ((VikMapsLayer_MapType*)g_list_nth_data(__map_types, (n)))
+#define MAPS_LAYER_NTH_TYPE(n) (VIK_MAP_SOURCE(g_list_nth_data(__map_types, (n))))
gint vik_maps_layer_get_map_type(VikMapsLayer *vml)
{
/****************************************/
#define DIRSTRUCTURE "%st%ds%dz%d" G_DIR_SEPARATOR_S "%d" G_DIR_SEPARATOR_S "%d"
+#define MAPS_CACHE_DIR maps_layer_default_dir()
+
#ifdef WINDOWS
-#define MAPS_CACHE_DIR "C:\\VIKING-MAPS\\"
+#include <io.h>
+#define GLOBAL_MAPS_DIR "C:\\VIKING-MAPS\\"
+#define LOCAL_MAPS_DIR "VIKING-MAPS"
#else /* POSIX */
-
#include <stdlib.h>
-
-#define MAPS_CACHE_DIR maps_layer_default_dir()
#define GLOBAL_MAPS_DIR "/var/cache/maps/"
+#define LOCAL_MAPS_DIR ".viking-maps"
+#endif
gchar *maps_layer_default_dir ()
{
const gchar *mapdir = g_getenv("VIKING_MAPS");
if ( mapdir ) {
defaultdir = g_strdup ( mapdir );
- } else if ( access ( GLOBAL_MAPS_DIR, W_OK ) == 0 ) {
+ } else if ( g_access ( GLOBAL_MAPS_DIR, W_OK ) == 0 ) {
defaultdir = g_strdup ( GLOBAL_MAPS_DIR );
} else {
- const gchar *home = g_getenv("HOME");
- if (!home || access(home, W_OK))
+ const gchar *home = g_get_home_dir();
+ if (!home || g_access(home, W_OK))
home = g_get_home_dir ();
if ( home )
- defaultdir = g_build_filename ( home, ".viking-maps", NULL );
+ defaultdir = g_build_filename ( home, LOCAL_MAPS_DIR, NULL );
else
- defaultdir = g_strdup ( ".viking-maps" );
+ defaultdir = g_strdup ( LOCAL_MAPS_DIR );
}
if (defaultdir && (defaultdir[strlen(defaultdir)-1] != G_DIR_SEPARATOR))
{
return defaultdir;
}
-#endif
-
static void maps_layer_mkdir_if_default_dir ( VikMapsLayer *vml )
{
- if ( vml->cache_dir && strcmp ( vml->cache_dir, MAPS_CACHE_DIR ) == 0 && access ( vml->cache_dir, F_OK ) != 0 )
+ if ( vml->cache_dir && strcmp ( vml->cache_dir, MAPS_CACHE_DIR ) == 0 && g_file_test ( vml->cache_dir, G_FILE_TEST_EXISTS ) == FALSE )
{
-#ifdef WINDOWS
- mkdir ( vml->cache_dir );
-#else
- mkdir ( vml->cache_dir, 0777 );
-#endif
+ g_mkdir ( vml->cache_dir, 0777 );
}
}
static guint map_index_to_uniq_id (guint8 index)
{
g_assert ( index < NUM_MAP_TYPES );
- return MAPS_LAYER_NTH_TYPE(index)->uniq_id;
+ return vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(index));
}
static guint map_uniq_id_to_index ( guint uniq_id )
{
gint i;
for ( i = 0; i < NUM_MAP_TYPES; i++ )
- if ( MAPS_LAYER_NTH_TYPE(i)->uniq_id == uniq_id )
+ if ( vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(i)) == uniq_id )
return i;
return NUM_MAP_TYPES; /* no such thing */
}
case PARAM_CACHE_DIR: maps_layer_set_cache_dir ( vml, data.s ); break;
case PARAM_MAPTYPE: {
gint maptype = map_uniq_id_to_index(data.u);
- if ( maptype == NUM_MAP_TYPES ) g_warning("Unknown map type");
+ if ( maptype == NUM_MAP_TYPES ) g_warning(_("Unknown map type"));
else vml->maptype = maptype;
break;
}
vml->mapzoom_id = data.u;
vml->xmapzoom = __mapzooms_x [data.u];
vml->ymapzoom = __mapzooms_y [data.u];
- }else g_warning ("Unknown Map Zoom"); break;
+ }else g_warning (_("Unknown Map Zoom")); break;
}
return TRUE;
}
* So, we can check if we have to inform the user about inconsistency */
VikViewportDrawMode vp_drawmode;
VikMapsLayer *vml = VIK_MAPS_LAYER(vl);
- VikMapsLayer_MapType *map_type = NULL;
+ VikMapSource *map = NULL;
vp_drawmode = vik_viewport_get_drawmode ( VIK_VIEWPORT(vp) );
- map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
- if (map_type->drawmode != vp_drawmode) {
- const gchar *drawmode_name = vik_viewport_get_drawmode_name (VIK_VIEWPORT(vp), map_type->drawmode);
- gchar *msg = g_strdup_printf("New map cannot be displayed in the current drawmode.\nSelect \"%s\" from View menu to view it.", drawmode_name);
+ map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ if (vik_map_source_get_drawmode(map) != vp_drawmode) {
+ const gchar *drawmode_name = vik_viewport_get_drawmode_name (VIK_VIEWPORT(vp), vik_map_source_get_drawmode(map));
+ gchar *msg = g_strdup_printf(_("New map cannot be displayed in the current drawmode.\nSelect \"%s\" from View menu to view it."), drawmode_name);
a_dialog_warning_msg ( VIK_GTK_WINDOW_FROM_LAYER(vml), msg );
g_free(msg);
}
}
}
-static VikMapsLayer *maps_layer_copy ( VikMapsLayer *vml, VikViewport *vvp )
-{
- VikMapsLayer *rv = maps_layer_new ( vvp );
- *rv = *vml;
- rv->cache_dir = g_strdup(rv->cache_dir);
- VIK_LAYER(rv)->name = NULL;
- return rv;
-}
-
static void maps_layer_marshall( VikMapsLayer *vml, guint8 **data, gint *len )
{
vik_layer_marshall_params ( VIK_LAYER(vml), data, len );
g_snprintf ( filename_buf, buf_len, DIRSTRUCTURE,
vml->cache_dir, mode,
mapcoord->scale, mapcoord->z, mapcoord->x, mapcoord->y );
- if ( access ( filename_buf, R_OK ) == 0) {
+ if ( g_file_test ( filename_buf, G_FILE_TEST_EXISTS ) == TRUE) {
{
GError *gx = NULL;
pixbuf = gdk_pixbuf_new_from_file ( filename_buf, &gx );
if (gx)
{
if ( gx->domain != GDK_PIXBUF_ERROR || gx->code != GDK_PIXBUF_ERROR_CORRUPT_IMAGE )
- g_warning ( "Couldn't open image file: %s", gx->message );
+ g_warning ( _("Couldn't open image file: %s"), gx->message );
g_error_free ( gx );
if ( pixbuf )
pixbuf = pixbuf_shrink ( pixbuf, xshrinkfactor, yshrinkfactor );
a_mapcache_add ( pixbuf, mapcoord->x, mapcoord->y,
- mapcoord->z, MAPS_LAYER_NTH_TYPE(vml->maptype)->uniq_id,
+ mapcoord->z, vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(vml->maptype)),
mapcoord->scale, vml->alpha, xshrinkfactor, yshrinkfactor );
}
}
if ( xshrinkfactor > REAL_MIN_SHRINKFACTOR && yshrinkfactor > REAL_MIN_SHRINKFACTOR )
existence_only = TRUE;
else {
- g_warning ( "Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out factor", (int)( 1.0/REAL_MIN_SHRINKFACTOR));
+ g_warning ( _("Cowardly refusing to draw tiles or existence of tiles beyond %d zoom out factor"), (int)( 1.0/REAL_MIN_SHRINKFACTOR));
return;
}
}
}
/* coord -> ID */
- VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
- if ( map_type->coord_to_mapcoord ( ul, xzoom, yzoom, &ulm ) &&
- map_type->coord_to_mapcoord ( br, xzoom, yzoom, &brm ) ) {
+ VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ if ( vik_map_source_coord_to_mapcoord ( map, ul, xzoom, yzoom, &ulm ) &&
+ vik_map_source_coord_to_mapcoord ( map, br, xzoom, yzoom, &brm ) ) {
/* loop & draw */
gint x, y;
gint xmin = MIN(ulm.x, brm.x), xmax = MAX(ulm.x, brm.x);
gint ymin = MIN(ulm.y, brm.y), ymax = MAX(ulm.y, brm.y);
- gint mode = map_type->uniq_id;
+ gint mode = vik_map_source_get_uniq_id(map);
VikCoord coord;
gint xx, yy, width, height;
start_download_thread ( vml, vvp, ul, br, REDOWNLOAD_NONE );
}
- if ( map_type->tilesize_x == 0 && !existence_only ) {
+ if ( vik_map_source_get_tilesize_x(map) == 0 && !existence_only ) {
for ( x = xmin; x <= xmax; x++ ) {
for ( y = ymin; y <= ymax; y++ ) {
ulm.x = x;
width = gdk_pixbuf_get_width ( pixbuf );
height = gdk_pixbuf_get_height ( pixbuf );
- map_type->mapcoord_to_center_coord ( &ulm, &coord );
+ vik_map_source_mapcoord_to_center_coord ( map, &ulm, &coord );
vik_viewport_coord_to_screen ( vvp, &coord, &xx, &yy );
xx -= (width/2);
yy -= (height/2);
}
}
} else { /* tilesize is known, don't have to keep converting coords */
- gdouble tilesize_x = map_type->tilesize_x * xshrinkfactor;
- gdouble tilesize_y = map_type->tilesize_y * yshrinkfactor;
+ gdouble tilesize_x = vik_map_source_get_tilesize_x(map) * xshrinkfactor;
+ gdouble tilesize_y = vik_map_source_get_tilesize_y(map) * yshrinkfactor;
/* ceiled so tiles will be maximum size in the case of funky shrinkfactor */
gint tilesize_x_ceil = ceil ( tilesize_x );
gint tilesize_y_ceil = ceil ( tilesize_y );
xend = (xinc == 1) ? (xmax+1) : (xmin-1);
yend = (yinc == 1) ? (ymax+1) : (ymin-1);
- map_type->mapcoord_to_center_coord ( &ulm, &coord );
+ vik_map_source_mapcoord_to_center_coord ( map, &ulm, &coord );
vik_viewport_coord_to_screen ( vvp, &coord, &xx_tmp, &yy_tmp );
xx = xx_tmp; yy = yy_tmp;
/* above trick so xx,yy doubles. this is so shrinkfactors aren't rounded off
g_snprintf ( path_buf, max_path_len, DIRSTRUCTURE,
vml->cache_dir, mode,
ulm.scale, ulm.z, ulm.x, ulm.y );
- if ( access ( path_buf, F_OK ) == 0 ) {
+ if ( g_file_test ( path_buf, G_FILE_TEST_EXISTS ) == TRUE ) {
vik_viewport_draw_line ( vvp, black_gc, xx+tilesize_x_ceil, yy, xx, yy+tilesize_y_ceil );
}
} else {
static void maps_layer_draw ( VikMapsLayer *vml, VikViewport *vvp )
{
- if ( MAPS_LAYER_NTH_TYPE(vml->maptype)->drawmode == vik_viewport_get_drawmode ( vvp ) )
+ if ( vik_map_source_get_drawmode(MAPS_LAYER_NTH_TYPE(vml->maptype)) == vik_viewport_get_drawmode ( vvp ) )
{
VikCoord ul, br;
gboolean remove_mem_cache = FALSE;
gboolean need_download = FALSE;
g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE,
- mdi->cache_dir, MAPS_LAYER_NTH_TYPE(mdi->maptype)->uniq_id,
+ mdi->cache_dir, vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(mdi->maptype)),
mdi->mapcoord.scale, mdi->mapcoord.z, x, y );
donemaps++;
a_background_thread_progress ( threaddata, ((gdouble)donemaps) / mdi->mapstoget ); /* this also calls testcancel */
if ( mdi->redownload == REDOWNLOAD_ALL)
- remove ( mdi->filename_buf );
+ g_remove ( mdi->filename_buf );
- else if ( (mdi->redownload == REDOWNLOAD_BAD) && (access ( mdi->filename_buf, F_OK ) == 0) )
+ else if ( (mdi->redownload == REDOWNLOAD_BAD) && (g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == TRUE) )
{
/* see if this one is bad or what */
GError *gx = NULL;
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file ( mdi->filename_buf, &gx );
if (gx || (!pixbuf))
- remove ( mdi->filename_buf );
+ g_remove ( mdi->filename_buf );
if ( pixbuf )
g_object_unref ( pixbuf );
if ( gx )
g_error_free ( gx );
}
- if ( access ( mdi->filename_buf, F_OK ) != 0 )
+ if ( g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == FALSE )
{
need_download = TRUE;
if (( mdi->redownload != REDOWNLOAD_NONE ) &&
mdi->mapcoord.x = x; mdi->mapcoord.y = y;
if (need_download) {
- if ( MAPS_LAYER_NTH_TYPE(mdi->maptype)->download ( &(mdi->mapcoord), mdi->filename_buf ))
+ if ( vik_map_source_download( MAPS_LAYER_NTH_TYPE(mdi->maptype), &(mdi->mapcoord), mdi->filename_buf ))
continue;
}
gdk_threads_enter();
g_mutex_lock(mdi->mutex);
if (remove_mem_cache)
- a_mapcache_remove_all_shrinkfactors ( x, y, mdi->mapcoord.z, MAPS_LAYER_NTH_TYPE(mdi->maptype)->uniq_id, mdi->mapcoord.scale );
+ a_mapcache_remove_all_shrinkfactors ( x, y, mdi->mapcoord.z, vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(mdi->maptype)), mdi->mapcoord.scale );
if (mdi->refresh_display && mdi->map_layer_alive) {
/* TODO: check if it's on visible area */
vik_layer_emit_update ( VIK_LAYER(mdi->vml) );
if ( mdi->mapcoord.x || mdi->mapcoord.y )
{
g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE,
- mdi->cache_dir, MAPS_LAYER_NTH_TYPE(mdi->maptype)->uniq_id,
+ mdi->cache_dir, vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(mdi->maptype)),
mdi->mapcoord.scale, mdi->mapcoord.z, mdi->mapcoord.x, mdi->mapcoord.y );
- if ( access ( mdi->filename_buf, F_OK ) == 0)
+ if ( g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == TRUE)
{
- remove ( mdi->filename_buf );
+ g_remove ( mdi->filename_buf );
}
}
}
gdouble xzoom = vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp );
gdouble yzoom = vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp );
MapCoord ulm, brm;
- VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
- if ( map_type->coord_to_mapcoord ( ul, xzoom, yzoom, &ulm )
- && map_type->coord_to_mapcoord ( br, xzoom, yzoom, &brm ) )
+ VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ if ( vik_map_source_coord_to_mapcoord ( map, ul, xzoom, yzoom, &ulm )
+ && vik_map_source_coord_to_mapcoord ( map, br, xzoom, yzoom, &brm ) )
{
MapDownloadInfo *mdi = g_malloc ( sizeof(MapDownloadInfo) );
gint a, b;
for ( b = mdi->y0; b <= mdi->yf; b++ )
{
g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE,
- vml->cache_dir, map_type->uniq_id, ulm.scale,
+ vml->cache_dir, vik_map_source_get_uniq_id(map), ulm.scale,
ulm.z, a, b );
- if ( access ( mdi->filename_buf, F_OK ) != 0)
+ if ( g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == FALSE )
mdi->mapstoget++;
}
}
if ( mdi->mapstoget )
{
- gchar *tmp = g_strdup_printf ( "%s %s%d %s %s...", redownload ? "Redownloading" : "Downloading", redownload == REDOWNLOAD_BAD ? "up to " : "", mdi->mapstoget, MAPS_LAYER_NTH_LABEL(vml->maptype), (mdi->mapstoget == 1) ? "map" : "maps" );
+ const gchar *tmp_str;
+ gchar *tmp;
+ if (redownload)
+ {
+ if (redownload == REDOWNLOAD_BAD)
+ tmp_str = ngettext("Redownloading up to %d %s map...", "Redownloading up to %d %s maps...", mdi->mapstoget);
+ else
+ tmp_str = ngettext("Redownloading %d %s map...", "Redownloading %d %s maps...", mdi->mapstoget);
+ }
+ else
+ {
+ tmp_str = ngettext("Downloading %d %s map...", "Downloading %d %s maps...", mdi->mapstoget);
+ }
+ tmp = g_strdup_printf ( tmp_str, mdi->mapstoget, MAPS_LAYER_NTH_LABEL(vml->maptype));
+
g_object_weak_ref(G_OBJECT(mdi->vml), weak_ref_cb, mdi);
/* launch the thread */
a_background_thread ( VIK_GTK_WINDOW_FROM_LAYER(vml), /* parent window */
void maps_layer_download_section_without_redraw( VikMapsLayer *vml, VikViewport *vvp, VikCoord *ul, VikCoord *br, gdouble zoom)
{
MapCoord ulm, brm;
- VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
- if (!map_type->coord_to_mapcoord(ul, zoom, zoom, &ulm)
- || !map_type->coord_to_mapcoord(br, zoom, zoom, &brm)) {
- g_warning("%s() coord_to_mapcoord() failed\n", __PRETTY_FUNCTION__);
+ 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__);
return;
}
for (i = mdi->x0; i <= mdi->xf; i++) {
for (j = mdi->y0; j <= mdi->yf; j++) {
g_snprintf ( mdi->filename_buf, mdi->maxlen, DIRSTRUCTURE,
- vml->cache_dir, map_type->uniq_id, ulm.scale,
+ vml->cache_dir, vik_map_source_get_uniq_id(map), ulm.scale,
ulm.z, i, j );
- if ( access ( mdi->filename_buf, F_OK ) != 0)
+ if ( g_file_test ( mdi->filename_buf, G_FILE_TEST_EXISTS ) == FALSE )
mdi->mapstoget++;
}
}
mdi->mapcoord.x = mdi->mapcoord.y = 0; /* for cleanup -- no current map */
if (mdi->mapstoget) {
- gchar *tmp = g_strdup_printf ( "%s %d %s %s...", "Downloading", mdi->mapstoget, MAPS_LAYER_NTH_LABEL(vml->maptype), (mdi->mapstoget == 1) ? "map" : "maps" );
+ gchar *tmp;
+ const gchar *fmt;
+ fmt = ngettext("Downloading %d %s map...",
+ "Downloading %d %s maps...",
+ mdi->mapstoget);
+ tmp = g_strdup_printf ( fmt, mdi->mapstoget, MAPS_LAYER_NTH_LABEL(vml->maptype) );
g_object_weak_ref(G_OBJECT(mdi->vml), weak_ref_cb, mdi);
/* launch the thread */
GtkWidget *item;
vml->dl_right_click_menu = GTK_MENU ( gtk_menu_new () );
- item = gtk_menu_item_new_with_label ( "Redownload bad map(s)" );
+ item = gtk_menu_item_new_with_label ( _("Redownload bad map(s)") );
g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_redownload_bad), vml );
gtk_menu_shell_append ( GTK_MENU_SHELL(vml->dl_right_click_menu), item );
- item = gtk_menu_item_new_with_label ( "Redownload all map(s)" );
+ item = gtk_menu_item_new_with_label ( _("Redownload all map(s)") );
g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_redownload_all), vml );
gtk_menu_shell_append ( GTK_MENU_SHELL(vml->dl_right_click_menu), item );
}
MapCoord tmp;
if (!vml || vml->vl.type != VIK_LAYER_MAPS)
return FALSE;
- VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
- if ( map_type->drawmode == vik_viewport_get_drawmode ( vvp ) &&
- map_type->coord_to_mapcoord ( vik_viewport_get_center ( vvp ),
+ VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ if ( vik_map_source_get_drawmode(map) == vik_viewport_get_drawmode ( vvp ) &&
+ vik_map_source_coord_to_mapcoord ( map, vik_viewport_get_center ( vvp ),
vml->xmapzoom ? vml->xmapzoom : vik_viewport_get_xmpp ( vvp ),
vml->ymapzoom ? vml->ymapzoom : vik_viewport_get_ympp ( vvp ),
&tmp ) ) {
vik_viewport_screen_to_coord ( vvp, 0, 0, &ul );
vik_viewport_screen_to_coord ( vvp, vik_viewport_get_width(vvp), vik_viewport_get_height(vvp), &br );
- VikMapsLayer_MapType *map_type = MAPS_LAYER_NTH_TYPE(vml->maptype);
- if ( map_type->drawmode == vp_drawmode &&
- map_type->coord_to_mapcoord ( &ul, xzoom, yzoom, &ulm ) &&
- map_type->coord_to_mapcoord ( &br, xzoom, yzoom, &brm ) )
+ VikMapSource *map = MAPS_LAYER_NTH_TYPE(vml->maptype);
+ if ( vik_map_source_get_drawmode(map) == vp_drawmode &&
+ vik_map_source_coord_to_mapcoord ( map, &ul, xzoom, yzoom, &ulm ) &&
+ vik_map_source_coord_to_mapcoord ( map, &br, xzoom, yzoom, &brm ) )
start_download_thread ( vml, vvp, &ul, &br, redownload );
- else if (map_type->drawmode != vp_drawmode) {
- const gchar *drawmode_name = vik_viewport_get_drawmode_name (vvp, map_type->drawmode);
- gchar *err = g_strdup_printf("Wrong drawmode for this map.\nSelect \"%s\" from View menu and try again.", drawmode_name);
+ else if (vik_map_source_get_drawmode(map) != vp_drawmode) {
+ const gchar *drawmode_name = vik_viewport_get_drawmode_name (vvp, vik_map_source_get_drawmode(map));
+ gchar *err = g_strdup_printf(_("Wrong drawmode for this map.\nSelect \"%s\" from View menu and try again."), _(drawmode_name));
a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(vml), err );
g_free(err);
}
else
- a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(vml), "Wrong zoom level for this map." );
+ a_dialog_error_msg ( VIK_GTK_WINDOW_FROM_LAYER(vml), _("Wrong zoom level for this map.") );
}
gtk_menu_shell_append ( GTK_MENU_SHELL(menu), item );
gtk_widget_show ( item );
- item = gtk_menu_item_new_with_label ( "Download Onscreen Maps" );
+ item = gtk_menu_item_new_with_label ( _("Download Onscreen Maps") );
g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_download_onscreen_maps), pass_along );
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show ( item );
- item = gtk_menu_item_new_with_label ( "Refresh Onscreen Tiles" );
+ item = gtk_menu_item_new_with_label ( _("Refresh Onscreen Tiles") );
g_signal_connect_swapped ( G_OBJECT(item), "activate", G_CALLBACK(maps_layer_redownload_all_onscreen_maps), pass_along );
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show ( item );